2011-05-03 46 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」。

相關問題