为什么我不能用ASP.NET的System.Diagnostics.Process调用Perl脚本?

时间:2009-09-04 20:45:22

标签: c# .net asp.net perl

我正在尝试使用System.Diagnostics.Process类从ASP.NET应用程序中运行Perl脚本。当我在命令行中键入它时,Perl命令运行正常,但是当ASP.NET尝试运行相同的命令时,它不起作用。

我怀疑它可能与输入和输出流有关。 Perl脚本需要很长时间才能在命令行上运行完成。但是在.NET中,命令几乎立即返回,当我尝试重定向Perl脚本的标准输出以查看产生的消息时,它只显示第一行并返回。使用阻塞流读取技术并不能解决这个问题; .NET确实认为Perl脚本只输出一行,然后完成。

有什么建议吗?尽我所能,脚本不能在.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();

1 个答案:

答案 0 :(得分:2)

切换最后两行:

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

或构建一个循环,继续从proc.StandardOutput读取,直到脚本完成。