Я написал следующие две функции и вызвал второй ( "callAndWait" ) из JavaScript, запущенного внутри Windows Script Host. Мое общее намерение - вызывать одну командную строку из другой. То есть, я запускаю начальный скриптинг с помощью cscript, а затем пытаюсь запустить что-то еще (Ant) из этого script.
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.Run(), но это дает мне ошибку" отказа в разрешении ". Это проблематично, потому что я не хочу, чтобы мои клиенты изменяли, как их среда Windows настроена только для запуска моей программы.
Что я могу сделать?