2010-09-29 59 views
4

我主要是C#程序員,但已離開與留給我兩個選項一個項目:Python&C#:IronPython是絕對必要的嗎?

  1. 叫出一個python腳本(保存爲.py文件),並處理返回值, OR ...
  2. 在C#中重寫整個python腳本(總共涉及6個.py文件)。

當然,方案2是時間的浪費主要,如果我可以簡單地實現選項1.此外,選項1是一個學習的機會,而方案2是一個總的怪胎copout。

所以,我的問題是這樣的:有沒有辦法建立一個C#過程對象來觸發.py文件的腳本,並捕獲腳本的返回值,而不使用IronPython?我沒有任何反對可能使用IronPython的東西,我只是需要一個解決方案儘快,所以如果我可以避開I.P.學習曲線,直到我沒有那麼緊迫的工作要做,那將是最佳的。

謝謝。

+5

選項3.用python重寫整個C#應用程序:) – 2010-09-29 17:10:35

+0

可愛。付這個男人,蘇西。 – 2010-09-29 17:44:42

回答

6

使用Process.Start運行Python腳本。在ProcessStartInfo對象,指定:

  • FileName =的Python腳本的路徑和文件名。

  • Arguments =您要傳遞給腳本的任何參數。

  • RedirectStandardOutput = (和RedirectStandardError如果需要的話)

  • UseShellExecute =

然後你得到一個Process對象,你可以做一些事情,特別是:

  • 使用Process.StandardOutput來讀取Python腳本的輸出。例如,您可以調用ReadToEnd()來獲取包含整個輸出的單個字符串,或者在循環中調用ReadLine()

  • 使用Process.ExitCode來讀取腳本的返回代碼。使用Process.WaitForExit等待腳本完成。

2

使用的System.Diagnostics.Process運行Python腳本,然後使用Process.ExitCode檢索腳本的返回值,一旦它完成:

// Start the script 
var process = System.Diagnostics.Process.Start("python MyScript.py"); 

// Wait for the script to run 
process.WaitForExit(); 

int returnVal = process.ExitCode; 
2

你可以這樣做:

Process py = new Process(); 
py.StartInfo.FileName = "python.exe"; 
py.StartInfo.Arguments = "c:\\python\\script.py"; 
py.StartInfo.UseShellExecute = false; 
py.StartInfo.CreateNoWindow = true; 
py.StartInfo.RedirectStandardOutput = true; 
py.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); 
py.Start(); 
py.BeginOutputReadLine(); 
py.WaitForExit(); 
py.Close(); 

但是,我必須說,你可以有多個系統,根據不同的語言,因爲他們能理解每個人說什麼。我的意思是,有一些標準可以被認爲是粘合整個事情的。例如,Python系統可以在Python中構建的Web服務中爲JSON,XML或其他標準提供C#系統。有時候最好查看一下你的架構。

+0

+1審查體系結構。 – 2010-09-29 17:12:06