Свойства StdOut, StdIn и StdErr

Свойства StdOut, StdIn и StdErr

Работать c потоками StdOut, StdIn и StdErr объекта WshScriptExec можно с помощью тех же методов, которые применяются в объекте WScript для доступа к соответствующим стандартным потокам (см. табл. 1.3). Например, запустив приведенный в листинге 1.27 сценарий ConToWin.js с помощью wscript.exe, мы выведем в графическое окно информацию о ключах программы cscript.exe (рис. 1.13).

Рис. 1.13. Результат выполнения сценария ConToWin.js

Отметим, что запускаемое консольное приложение cscript.exe выводит символы кириллицы в DOS-кодировке, поэтому для вывода таких символов в графическое окно их нужно преобразовать в Windows-кодировку. В рассматриваемом сценарии это делается с помощью функции DosToWin, которая преобразует переданную в качестве параметра строку следующим образом: все символы кириллицы в этой строке переводятся в Windows-кодировку, остальные символы остаются без изменений:

function DosToWin(s) {

 var i,ss;  //Объявляем переменные

 //Проверяем, создан ли объект RusDict

 if (typeof(RusDict)=="undefined")

  //Если объект RusDict не создан, создаем его

  MakeRusDict();

 ss="";

 for (i=0;i<s.length;i++) {  //Цикл по всем символам в строке

  if (RusDict.Exists(s.charAt(i)))  //Проверяем наличие символа в словаре

   //Преобразуем i-й символ в Windows-кодировку

   ss+=RusDict.Item(s.charAt(i));

  else ss+=s.charAt(i);

 }

 return ss;

}

Основным в функции DosToWin является использование объекта Dictionary с именем RusDict. Этот объект формируется в функции MakeRusDict и содержит пары "ключ"–"знaчeниe" для всех букв русского алфавита, причем в качестве ключа указывается буква в DOS-кодировке, а в качестве значения — символ с кодом, который соответствует этой букве в Windows-кодировке.

//Функция для создания объекта Dictionary с парами "ключ-значение", где

//"ключ"-буква в DOS-кодировке, "значение"- символ, соответствующий этой

//букве в Windows-кодировке

function MakeRusDict() {

 //Создаем объект Dictionary

 RusDict = WScript.CreateObject("Scripting.Dictionary");

 //Заполняем пары "ключ" (символ в DOS-кодировке)- "значение" (символ в

 //Window-кодировке) для всех букв русского алфавита

 RusDict.add("Ђ", "А"); RusDict.add("Ѓ", "Б"); RusDict.add("‚", "В");

 RusDict.add("ѓ", "Г"); RusDict.add("„", "Д"); RusDict.add("…", "Е");

 RusDict.add("р", "Ё"); RusDict.add("†", "Ж"); RusDict.add("‡", "З");

 RusDict.add("€", "И"); RusDict.add("‰", "Й"); RusDict.add("Љ", "К");

 RusDict.add("‹", "Л"); RusDict.add("Њ", "М"); RusDict.add("Ќ", "Н");

 RusDict.add("Ћ", "О"); RusDict.add("Џ", "П"); RusDict.add("ђ", "Р");

 RusDict.add("‘", "С"); RusDict.add("’", "Т"); RusDict.add("“", "У");

 RusDict.add("”", "Ф"); RusDict.add("•", "Х"); RusDict.add("–", "Ц");

 RusDict.add("—", "Ч"); RusDict.add("?", "Ш"); RusDict.add("™", "Щ");

 RusDict.add("љ", "Ъ"); RusDict.add("›", "Ы"); RusDict.add("њ", "Ь");

 RusDict.add("ќ", "Э"); RusDict.add("ћ", "Ю"); RusDict.add("џ", "Я");

 RusDict.add(" ", "а"); RusDict.add("Ў", "б"); RusDict.add("ў", "в");

 RusDict.add("Ј", "г"); RusDict.add("¤", "д"); RusDict.add("Ґ", "е");

 RusDict.add("с", "ё"); RusDict.add("¦", "ж"); RusDict.add("§", "з");

 RusDict.add("Ё", "и"); RusDict.add("©", "й"); RusDict.add("Є", "к");

 RusDict.add("«", "л"); RusDict.add("¬", "м"); RusDict.add("­", "н");

 RusDict.add("®", "о"); RusDict.add("Ї", "п"); RusDict.add("а", "р");

 RusDict.add("б", "с"); RusDict.add("в", "т"); RusDict.add("г", "у");

 RusDict.add("д", "ф"); RusDict.add("е", "х"); RusDict.add("ж", "ц");

 RusDict.add("з", "ч"); RusDict.add("и", "ш"); RusDict.add("й", "щ");

 RusDict.add("к", "ъ"); RusDict.add("л", "ы"); RusDict.add("м", "ь");

 RusDict.add("н", "э"); RusDict.add("о", "ю"); RusDict.add("п", "я");

}

Листинг 1.27. Доступ к потоку StdOut дочернего процесса

/*****************************************************************/

/* Имя: ConToWin.js                                              */

/* Язык: JScript                                                 */

/* Кодировка: DOS                                            */

/* Описание: Доступ к потоку StdOut дочернего процесса           */

/*****************************************************************/

var WshShell,theJob,s,IsBreak,RusDict;  //Объявляем переменные

//Функция для создания объекта Dictionary с парами "ключ-значение", где

//"ключ"-буква в DOS-кодировке, "значение"- символ, соответствующий этой

//букве в Windows-кодировке

function MakeRusDict() {

 //Создаем объект Dictionary

 RusDict = WScript.CreateObject("Scripting.Dictionary");

 //Заполняем пары "ключ" (символ в DOS-кодировке)- "значение" (символ в

 //Window-кодировке) для всех букв русского алфавита

 RusDict.add("Ђ", "А"); RusDict.add("Ѓ", "Б"); RusDict.add("‚", "В");

 RusDict.add("ѓ", "Г"); RusDict.add("„", "Д"); RusDict.add("…", "Е");

 RusDict.add("р", "Ё"); RusDict.add("†", "Ж"); RusDict.add("‡", "З");

 RusDict.add("€", "И"); RusDict.add("‰", "Й"); RusDict.add("Љ", "К");

 RusDict.add("‹", "Л"); RusDict.add("Њ", "М"); RusDict.add("Ќ", "Н");

 RusDict.add("Ћ", "О"); RusDict.add("Џ", "П"); RusDict.add("ђ", "Р");

 RusDict.add("‘", "С"); RusDict.add("’", "Т"); RusDict.add("“", "У");

 RusDict.add("”", "Ф"); RusDict.add("•", "Х"); RusDict.add("–", "Ц");

 RusDict.add("—", "Ч"); RusDict.add("?", "Ш"); RusDict.add("™", "Щ");

 RusDict.add("љ", "Ъ"); RusDict.add("›", "Ы"); RusDict.add("њ", "Ь");

 RusDict.add("ќ", "Э"); RusDict.add("ћ", "Ю"); RusDict.add("џ", "Я");

 RusDict.add(" ", "а"); RusDict.add("Ў", "б"); RusDict.add("ў", "в");

 RusDict.add("Ј", "г"); RusDict.add("¤", "д"); RusDict.add("Ґ", "е");

 RusDict.add("с", "ё"); RusDict.add("¦", "ж"); RusDict.add("§", "з");

 RusDict.add("Ё", "и"); RusDict.add("©", "й"); RusDict.add("Є", "к");

 RusDict.add("«", "л"); RusDict.add("¬", "м"); RusDict.add("­", "н");

 RusDict.add("®", "о"); RusDict.add("Ї", "п"); RusDict.add("а", "р");

 RusDict.add("б", "с"); RusDict.add("в", "т"); RusDict.add("г", "у");

 RusDict.add("д", "ф"); RusDict.add("е", "х"); RusDict.add("ж", "ц");

 RusDict.add("з", "ч"); RusDict.add("и", "ш"); RusDict.add("й", "щ");

 RusDict.add("к", "ъ"); RusDict.add("л", "ы"); RusDict.add("м", "ь");

 RusDict.add("н", "э"); RusDict.add("о", "ю"); RusDict.add("п", "я");

}

//Функция для перевода строки из DOS- в Windows-кодировку

function DosToWin(s) {

 var i,ss;  //Объявляем переменные

 //Проверяем, создан ли объект RusDict

 if (typeof(RusDict)=="undefined")

  //Если объект RusDict не создан, создаем его

  MakeRusDict();

 ss="";

 for (i=0;i<s.length;i++) {  //Цикл по всем символам в строке

  if (RusDict.Exists(s.charAt(i)))  //Проверяем наличие символа в словаре

   //Преобразуем i-й символ в Windows-кодировку

   ss+=RusDict.Item(s.charAt(i));

  else ss+=s.charAt(i);

 }

 return ss;

}

/*************  Начало *********************************************/

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Запускаем дочернее приложение

theJob = WshShell.Exec("cscript");

IsBreak=false;

for (;;) {

 if (!theJob.StdOut.AtEndOfStream)

  //Считываем всю информацию, находящуюся в потоке StdOut

  //дочернего процесса

  s+=theJob.StdOut.ReadAll();

 if (IsBreak) break;

 if (theJob.status==1) //Проверяем, не завершилась ли запущенная задача

  IsBreak=true;

 else WScript.Sleep(100);

}

//Преобразуем сформированные строки в Windows-кодировку

//и выводим их на экран

WScript.Echo(DosToWin(s));

/*************  Конец *********************************************/

Таким образом, можно с помощью метода Exec запустить утилиту командной строки, передавать ей нужную входную информацию с помощью свойства StdIn и с помощью свойства StdOut получать и анализировать выдаваемые этой утилитой строки (соответствующие примеры приведены также в листингах 2.37 и 2.38).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Свойства StdErr, StdIn, StdOut

Из книги автора

Свойства StdErr, StdIn, StdOut Доступ к стандартным входным и выходным потокам с помощью свойств StdIn, StdOut и StdErr можно получить только в том случае, если сценарий запускался в консольном режиме с помощью cscript.exe. Если сценарий был запущен с помощью wscript.exe, то при попытке обратиться к


Свойства

Из книги автора

Свойства Прежде всего надо отметить, что объект document существует в единственном экземпляре для всего HTML-документа. Он присутствует всегда, если существует HTML-документ, поэтому специально создавать его не требуется.activeElementИспользуется в сценарии для получения ссылки на


Свойства

Из книги автора

Свойства Объект window представляет текущее окно Web-обозревателя или отдельный фрейм, если окно разделено на фреймы.closedВозвращает true, если текущее окно закрыто. Может быть использовано при работе с несколькими окнами.defaultStatusСообщение по умолчанию, отображаемое в строке


Свойства

Из книги автора

Свойства aboveВозвращает ссылку на слой, находящийся над текущим (т.е. выше в z-последовательности). Если таких нет, возвращается null.backgroundСсылка но объект Image, представляющий фоновый ресунок текущего слоя. Вы можете использовать свойство src этого объекта для задания или


Свойства WMI

Из книги автора

Свойства WMI Для работы оснастки Управляющий элемент WMI необходимо, чтобы в системе был зарегистрирован GUID-номер {5C659257-E236-11D2-8899-00104B2AFB46}. Именно этот GUID-номер и идентифицирует настройки оснастки Управляющий элемент WMI. Эта оснастка входит в состав консоли Инфраструктура


1.1.6. Свойства

Из книги автора

1.1.6. Свойства TUUCode компонент имеет восемь опубликованных свойств (мы здесь опустим описание обработчиков событий):Свойство About содержит информацию о правах и версии.Свойство Active может использоваться для вызова преобразования UUCode во время разработки (design time), подобно


Свойства таблицы

Из книги автора

Свойства таблицы В Microsoft Word 2007 есть очень удобный набор функций, объединенных в окне Свойства таблицы (рис. 5.21). Его можно открыть, щелкнув правой кнопкой мыши в любом месте таблицы и выполнив команду Свойства таблицы или нажав кнопку Свойства в группе Таблица на вкладке


Свойства, доступные только для чтения, и свойства, доступные только для записи

Из книги автора

Свойства, доступные только для чтения, и свойства, доступные только для записи При создании типов класса можно создавать свойства, доступные только для чтения. Для этого просто создайте свойство без соответствующего блока set. Точно так же, если вы хотите иметь свойство,


Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.

Из книги автора

Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn. Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки — стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и


Пример 16-2. Перенаправление stdout с помощью exec

Из книги автора

Пример 16-2. Перенаправление stdout с помощью exec #!/bin/bash# reassign-stdout.shLOGFILE=logfile.txtexec 6>&1 # Связать дескр. #6 со stdout. # Сохраняя stdout.exec > $LOGFILE # stdout замещается файлом "logfile.txt".# ----------------------------------------------------------- ## Весь вывод от команд, в данном блоке, записывается в файл


Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec

Из книги автора

Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec #!/bin/bash# upperconv.sh# Преобразование символов во входном файле в верхний регистр.E_FILE_ACCESS=70E_WRONG_ARGS=71if [ ! -r "$1" ] # Файл доступен для чтения?then echo "Невозможно прочитать из заданного файла!" echo