python Popen stderr = PIPE 6000+线导致挂起

时间:2014-06-28 06:05:21

标签: python popen readline wx.textctrl

我在OSX中通过Popen运行一个命令行应用程序,它产生许多行命令行读出,通过stderr传递给我的wx.TextCtrl窗口。我正在使用线程和类,一切都工作正常,直到我运行产生数千行的东西,此时我的应用程序运行良好,直到它挂在6498行,我不知道为什么,任何想法好吗?

self.process1 = Popen(shlex.split(command), shell=False, stderr=PIPE)
while True:
    line = self.process1.stderr.readline().decode('utf-8')
    wx.CallAfter(self.frame.running_log1.AppendText, line)
    self.process1.stderr.flush()
    if "Some text" in line:
        break

1 个答案:

答案 0 :(得分:1)

wx.TextCtrl具有可添加到控件的最大字符数。它是特定于平台的,取决于本机控制,但据记录它应至少为32k。

您可以尝试设置特定的最大长度,或通过将最大长度设置为0将其委托给本机控件。请参阅SetMaxLength()方法。

您可以通过检查6000多行中包含的字节数来计算当前最大长度的设置。此外,您可以为wx.EVT_TEXT_MAXLEN(id, func)事件注册事件处理程序,该事件处理程序将通知您的应用程序尝试超出限制。

这完全基于wxWidgets / wxPython文档,而不是实际经验。

BTW,self.process1.stderr.flush()没有做任何事情,因为你没有写到子进程。