我编写了以下两个函数,并从运行在 Windows Script Host 中的 JavaScript 调用第二个函数(“callAndWait”)。我的总体意图是从另一个命令行程序调用一个命令行程序。也就是说,我正在使用 cscript 运行初始脚本,然后尝试从该脚本运行其他东西(Ant)。
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 环境的配置方式只是为了运行我的程序。
我能做些什么?