我正在尝试使用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();
答案 0 :(得分:2)
切换最后两行:
lineproc.WaitForExit();
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first
或构建一个循环,继续从proc.StandardOutput读取,直到脚本完成。