Получение вывода от WshShell. Должностное лицо, использующее Windows Script Host

Я записал следующие две функции, и назовите второе ("callAndWait") от JavaScript, работающего в Windows Script Host. Мое полное намерение состоит в том, чтобы назвать одну программу командной строки от другого. Таким образом, я выполняю первоначальные сценарии с помощью cscript, и затем пытаясь выполнить что-то еще (Муравей) из того сценария.

function readAllFromAny(oExec)
{
     if (!oExec.StdOut.AtEndOfStream)
          return oExec.StdOut.ReadLine();

     if (!oExec.StdErr.AtEndOfStream)
          return "STDERR: " + oExec.StdErr.ReadLine();

     return -1;
}

// Execute a command line function....
function callAndWait(execStr) {
 var oExec = WshShell.Exec(execStr);
  while (oExec.Status == 0)
 {
  WScript.Sleep(100);
  var output;
  while ( (output = readAllFromAny(oExec)) != -1) {
   WScript.StdOut.WriteLine(output);
  }
 }

}

К сожалению, когда я запускаю свою программу, я не получаю непосредственную обратную связь о том, что делает названная программа. Вместо этого вывод, кажется, прибывает урывками, иногда ожидая, пока исходная программа не закончилась, и иногда это, кажется, зашло в тупик. То, что я действительно хочу сделать, имеют порожденный процесс, на самом деле совместно используют тот же StdOut как обработка вызовов, но я не вижу способ сделать это. Просто установка oExec. StdOut = WScript. StdOut не работает.

Существует ли альтернативный способ породить процессы, которые совместно используют StdOut & StdErr процесса запуска? Я пытался использовать "WshShell. Выполненный (), но это дает мне, "разрешение отклонило" ошибку. Это проблематично, потому что я не хочу должным быть говорить моим клиентам изменяться, как их среда Windows настроена только для запущения моей программы.

Что я могу сделать?

11
задан Eric Johnson 16 January 2010 в 01:46
поделиться

1 ответ

Да, функция Exec, похоже, сломана, когда речь идет о выходе клеммы.

Я использовал аналогичную функцию функцию MOULYSESTDDDD (E) {WSCRICT.STOUT.WRITE (E.STDOUT.READALL ()); WSCRICT.STDERR.WRITE (E.STDERR.READALL ());} , который я звоню в петле, аналогичную твоему. Не уверена, если проверка на EOF и линию чтения по строке лучше или хуже.

1
ответ дан 3 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: