我阅读了许多与此相关的问题并学到了很多,但我仍然无法解决我的问题。我正在构建一个运行c++可执行文件并实时显示该可执行文件stdout的wxPython应用程序。在尝试使其工作时,我遇到了几个奇怪的结果。以下是我的当前设置/问题:
//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')
当我将子进程的标准输出重定向到管道时,它会变慢/挂起,但如果将其写入文件或根本不重定向,则没有问题。为什么会这样呢?