2016-08-02 27 views
0

我試圖從C#中編寫的命令行項目中重定向標準輸出,並通過Python文件中的數據讀取。重定向C#標準輸出並用Python讀取

目前,C#應用程序將從傳感器讀取的數據寫入CSV文件。我必須稍後運行Python文件來獲取和處理數據(必須在Python中完成,數據收集必須在.NET中使用SDK來完成)。

我希望能夠同時運行C#和Python項目,並將數據流直接從C#傳輸到Python項目,而無需使用中間本地文件(CSV)。

我已經在SO和MSDN文檔中完成了我自己的打獵。我正在尋找使用ProcessStartInfo.RedirectStandardOutput Property重定向C#應用程序的控制檯輸出。

我還不知道如何從Python文件中獲取此流中的數據。 This article有助於更好地理解如何接近它,但我仍然陷入困境。

我也在看Python中的subprocess.Popen.communicate,但我還不確定這是否適用於我所要求的。

任何幫助,將不勝感激。

+2

你是否正在從Python內部調用C#CLI(我編譯的假設?)?通過'subprocess'?你能否爲你的問題增加一些細節? –

+0

這是一個Python問題。如果它已經向stdout輸出文本(例如,使用'Console.Writeline()'),那麼您就不需要對C#項目執行任何操作。 * Python *是需要重定向標準輸出流的設備(假設它產生了c#程序)。在c#重定向中充滿了注意事項,並且有多種方式可以實現它,所以,假設python具有相似的複雜性和注意事項,最好將您的c#程序更改爲輸出到文本文件,然後將該文本文件讀入python(因爲我認爲這比捕獲重定向輸出更容易)。 – Quantic

+0

@Kristof爲了清晰起見,我在帖子中增加了更多信息。 –

回答

0

感謝@Quantic提供了一些很好的資源。使用subprocess.Popen,我可以運行C#項目的內置.exe文件,並將輸出重定向到我的Python文件。我現在可以將print()輸出到Python控制檯,輸出到C#控制檯(Console.WriteLine())的所有信息。

Python代碼:

from subprocess import Popen, PIPE, STDOUT 

p = Popen('ConsoleDataImporter.exe', stdout = PIPE, stderr = STDOUT, shell = True) 

while True: 
    line = p.stdout.readline() 
    print(line) 
    if not line: 
     break 

被創建,跳出在該項目的終止封閉while循環的呢?這得由線的.NET項目線的控制檯輸出。