System.Diagnostics.Process
クラスを使用して、ASP.NETアプリケーション内からPerlスクリプトを実行しようとしています。 Perlコマンドは、コマンドラインに入力するとうまく動作しますが、ASP.NETが同じコマンドを実行しようとすると動作しません。なぜASP.NETのSystem.Diagnostics.ProcessでPerlスクリプトを呼び出せないのですか?
私はそれが入力と出力ストリームと関係があると思われます。 Perlスクリプトは、コマンドラインで完了するまでに時間がかかります。しかし、.NETではコマンドがほぼ即座に返され、Perlスクリプトの標準出力をリダイレクトして、どのメッセージが出力されているかを確認しようとすると、最初の行が返されて返されます。ブロッキングストリーム読み取りテクニックを使用してもこれは解決されません。 .NETは本当にPerlスクリプトが1行だけ出力してから終了すると考えています。
提案がありますか?私が望む限り、スクリプトは.NETで書き直すことはできません。プロセスを起動するために使用しているコードは次のとおりです。 ReadToEnd()
を一連のReadLine()
呼び出しに変更しようとしましたが、最初の呼び出しが最初の行の出力を返した後、次の呼び出しはnullを返します。
Process proc = new Process();
proc.StartInfo.FileName = scriptPath;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first line
proc.WaitForExit();