我對此問題感到絕對困惑。讓我快速運行我正在編寫的程序:控制檯應用程序運行錯誤代碼
我正在構建一個無限期的python腳本,運行腳本,解析StdOut/Err,並將這些結果寫入數據庫。
我一直在從底層開始構建它,現在我需要將所有的部分拼湊在一起。不過,我一直在調試問題。我通常不製作控制檯應用程序,但爲了我所做的目的,沒有其他選擇(即我的目標是創建一個以python腳本作爲參數的控制檯應用程序)。
因此,在我的命名空間中,爲了清楚起見,我有兩個主要的類,爲了清晰起見,我將它們分成了兩個不同的文件。所有內部的功能都是靜態的,所以它實際上只是一個組織性的東西。這兩個文件分別是我編寫的python運行輸出捕獲應用程序和我編寫的數據庫報告應用程序的「Harness」和「Query」。現在我試圖讓Harness的結果進入查詢。爲了讓代碼更容易維護,我試圖將它們保存在單獨的文件中,以便更容易消化。
問題是,當我啓動我的命令行並瀏覽可執行文件並將其作爲參數傳遞給示例python腳本時,我只從應用程序的查詢一半獲得控制檯輸出。我已經在Harness文件的main(string [] args)函數中放置了一些Console.WriteLines,但這些函數永遠不會寫入。只有第二個Query類中的代碼纔會被執行 - 有點。
這裏是東西真的開始混淆我的地方,我的線束中的一個功能是應用程序的一半寫入日誌文本文件,該文件的時間標記運行並報告結果。該文本文件仍在寫入。然後我想我的示例py文件輸出到一個文本文件,因爲我的重定向標準輸出顯然不工作。果然,python打開了該文本文件並寫信給它,暗示它確實運行了該代碼。
然而,這些日誌記錄調用的函數包含不輸出到控制檯的Console.WriteLines。唯一的時間控制檯輸出工作,是在應用程序的後半部分。
如果有人能夠解釋這些問題,我真的會挖掘它。我有很多代碼都包含一些敏感數據,所以我寧願不只是給它一個大的轉儲,實際上沒有我認爲與該問題有關的代碼的特定區域 - 我承認我不知道當然。讓我知道你對我的需求,我會盡我所能。
List<string> retList = new List<string>();
// Loads Python
Process pr = new Process();
pr.StartInfo.FileName = @"C:\Python27\python.exe";
pr.StartInfo.Arguments = script;
Console.WriteLine(script);
//pr.StartInfo.Arguments = @"C:\PythonProj\hello.py";
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.RedirectStandardOutput = true;
pr.StartInfo.RedirectStandardError = true;
// Runs Test Script
pr.Start();
string output = pr.StandardError.ReadToEnd();
pr.WaitForExit();
Console.WriteLine(output);
請顯示一些相關的代碼。 – 2012-02-06 17:41:14
同意奧斯汀。具體來說,顯示您創建/調用新流程的代碼。這些屬性可能沒有正確設置來處理輸入/輸出流的重定向。 – Servy 2012-02-06 17:43:13
我將代碼編輯到主帖子中。 而且,值得一提的是,運行代碼的線束本身就可以工作(編輯)。雖然看到重定向代碼時確實遇到問題,但「harness」類中的控制檯寫入語句沒有輸出到控制檯 – Wuzseen 2012-02-06 17:48:28