次の2つの関数を作成し、Windows Script Host内で実行されているJavaScriptから2番目の関数( "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環境の構成を変更するようにクライアントに指示する必要がないため、問題があります。
私に何ができる?