2009-09-04 10 views
1

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(); 

答えて

2

スイッチ2つの最後の行:

lineproc.WaitForExit(); 
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first 

またはスクリプトが終了するまでproc.StandardOutputから読み続けループを構築します。

関連する問題