我在寫一個運行python腳本的WCF服務。從c#中的python腳本捕捉運行時異常和輸出#
爲此,我一直在使用下面的代碼:
ProcessStartInfo start = new ProccessStartInfo();
start.FileName = "my/full/path/to/python.exe";
start.Arguments = string.Format("{0} {1}", script, args);
start.UseShellExecute = false;
start.CreateNoWindow = true;
start.RedirectStandardOutput = true;
start.RedirectStandardError = true;
Process p = new Process();
p.StartInfo = start;
p.Start();
p.WaitForExit();
string stderr = Process.StandardError.ReadToEnd();
string stdout = Process.StandardOutput.ReadToEnd();
現在我已經注意到了什麼(大量的測試之後)是Process對象得到標準錯誤/輸出或捕獲異常如果錯誤與「編譯」錯誤有關,就像我使用了未聲明的變量或類似的東西,但是運行時異常和打印沒有被捕獲或無法在C#範圍內讀取。
我試圖運行整個「python.exe pythonCommand.py args」,因爲它們是從C#代碼發送的,或者只是發送命令行提示中的ProcessStartInfo.Arguments中的內容,並且它返回異常並在兩種情況下都會打印,但仍然在通過C#Process對象運行時,我沒有發現任何異常,並且沒有輸出或錯誤。
我對這件事一無所知,這讓我覺得有點愚蠢(希望我是這樣,而且有一個簡單的解決方案),如果有人偶然發現這個案子可以幫我解決問題,我會非常感激。
謝謝, 馬特
只是讓你的Python例外打印錯誤。然後抓住你的過程的輸出。你甚至可以寫一些東西來解析輸出並尋找錯誤。很難用你的python給你一個例子。 – Botonomous
但問題是既沒有從python拋出異常,也沒有輸出被讀取。 過程的標準輸出(以及標準錯誤)始終爲空 –
您正在讀取的輸出錯誤。 – Botonomous