0

我正在通过 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
4

1 回答 1

1

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

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

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

这一切都基于 wxWidgets/wxPython 文档,而不是基于实际经验。

顺便说一句,self.process1.stderr.flush()因为您没有写入子进程,所以什么都不做。

于 2014-06-28T12:13:11.863 回答