我在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
答案 0 :(得分:1)
wx.TextCtrl
具有可添加到控件的最大字符数。它是特定于平台的,取决于本机控制,但据记录它应至少为32k。
您可以尝试设置特定的最大长度,或通过将最大长度设置为0将其委托给本机控件。请参阅SetMaxLength()方法。
您可以通过检查6000多行中包含的字节数来计算当前最大长度的设置。此外,您可以为wx.EVT_TEXT_MAXLEN(id, func)
事件注册事件处理程序,该事件处理程序将通知您的应用程序尝试超出限制。
这完全基于wxWidgets / wxPython文档,而不是实际经验。
BTW,self.process1.stderr.flush()
没有做任何事情,因为你没有写到子进程。