2011-05-03 54 views
0

我想在我的c#代码中执行perl脚本并将结果输出到文件。 perl脚本会将一个二进制文件名作为输入参数,并且我想将结果重定向到一个文本文件。我在我的C#代码中有以下内容,但不会创建输出文件test.txt。请告知您是否知道问题:如何使用输入参数执行perl脚本并将结果输出到C#文件中

private Process myProcess = null; 

myProcess = new Process(); 

myProcess.StartInfo.FileName = "perl.exe"; 
myProcess.StartInfo.Arguments = "C:\\mydir\\myPerl.pl C:\\mydir\\myFile.DAT > C:\\mydir\\test.txt"; 
myProcess.Start(); 
+0

您是否有任何证据表明Perl脚本能正常运行?如果是这样,我怀疑这确实是一个C#问题。否则,我会首先验证Perl脚本是否正确。 – 2011-05-03 18:34:19

+0

perl脚本是正确的,因为如果我使用命令行执行它,它的工作原理。 – CSharpTag 2011-05-03 18:42:51

回答

0

该程序是否执行?我的意思是只是输出文件没有被创建或者进程没有启动?顺便说一下,您需要转义这些反斜杠或在参数字符串前使用@。

重定向不是一个参数,所以我不认为你可以在arguments参数中指定“> C:\ mydir \ test.txt”“,或者你也可以尝试使用Process.StandardOutput。在输出文件的Perl脚本参数,使Perl代码编写的文本文件

+0

是的,程序执行没有任何问题,但输出不会被创建。 – CSharpTag 2011-05-03 18:41:34

+0

尝试Process.StandardOutput(请参阅页面上的示例,在使用它之前需要设置Process.StartInfo.UseShellExecute = false和Process.StartInfo.RedirectStandardOutput = true。) – 2011-05-03 18:47:54

1

我已经回答了类似的问题a coupletimes before的:。

,这里是我以前的答案只需更换与会代表改为写入文件。

ProcessStartInfo processInfo = new ProcessStartInfo("Myexe.exe"); 
processInfo.ErrorDialog = false; 
processInfo.UseShellExecute = false; 
processInfo.RedirectStandardOutput = true; 
processInfo.RedirectStandardError = true; 

Process proc = Process.Start(processInfo); 

// You can pass any delegate that matches the appropriate 
// signature to ErrorDataReceived and OutputDataReceived 
proc.ErrorDataReceived += (sender, errorLine) => { if (errorLine.Data != null) Trace.WriteLine(errorLine.Data); }; 
proc.OutputDataReceived += (sender, outputLine) => { if (outputLine.Data != null) Trace.WriteLine(outputLine.Data); }; 
proc.BeginErrorReadLine(); 
proc.BeginOutputReadLine(); 

proc.WaitForExit(); 

在您的特定情况下,请不要忘记从命令行中删除“> C:\\mydir\\test.txt”。

相关问题