我已經閱讀了許多與此有關的問題,並學到了很多,但我仍然無法解決我的問題。我正在構建一個運行C++可執行文件的wxPython應用程序,並實時顯示該可執行文件的stdout。我遇到了幾個奇怪的結果,試圖使這項工作。這裏是我的當前設置/問題:Python從子流程捕獲標準輸出逐行
//test.cc (compiled as test.out with gcc 4.5.2)
#include <stdio.h>
int main()
{
FILE* fh = fopen("output.txt", "w");
for (int i = 0; i < 10000; i++)
{
printf("Outputting: %d\n", i);
fprintf(fh, "Outputting: %d\n", i);
}
fclose(fh);
return 0;
}
#wxPythonScript.py (running on 2.7 interpreter)
def run(self):
self.externalBinary = subprocess.Popen(['./test.out'], shell=False, stdout=subprocess.PIPE)
while not self.wantAbort:
line = self.externalBinary.stdout.readline()
wx.PostEvent(self.notifyWindow, Result_Event(line, Result_Event.EVT_STDOUT_ID))
print('Subprocess still running')
print('Subprocess aborted smoothly')
如果我運行上面的代碼的子進程需要很長的時間才能完成,即使所有它需要做的就是寫出來的數據並退出。但是,如果我運行下面的它很快就結束了:
#wxPythonScript.py (running on 2.7 interpreter)
def run(self):
outFile = open('output.txt', 'r+')
self.externalBinary = subprocess.Popen(['./test.out'], shell=False, stdout=outFile)
while not self.wantAbort:
#line = self.externalBinary.stdout.readline()
#wx.PostEvent(self.notifyWindow, Result_Event(line, Result_Event.EVT_STDOUT_ID))
print('Subprocess still running')
print('Subprocess aborted smoothly')
所以基本上每當我從子到管道標準輸出重定向它會減慢/掛起,但如果我把它寫入一個文件,或不把它重定向完全沒問題。這是爲什麼?
請搜索。這經常被問到。 –
可能的重複[讀取子進程標準輸出行](http://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line) –
我做過承諾。我讀過一噸。 2天前,我對子進程,線程,wx事件,stdout一無所知。我會繼續尋找當然。你能推薦一些關鍵字來搜索嗎?也許我在尋找錯誤的東西。大多數我搜查:非阻塞stdout.readline python,子進程標準輸出等 – anderspitman