Я пытаюсь получить вывод команды, которая выполняется в фоновом режиме, следующим образом:
def OnRun(self, event):
"""Run the command entered in the command widget."""
# Allow redirection of command I/O so we can capture it
process = wx.Process(self)
process.Redirect()
# Run the command
pid = wx.Execute(self.commandCtrl.GetValue(), wx.EXEC_ASYNC, process)
# Copy the output from the command to the results widget
stream = process.GetInputStream()
while stream.CanRead():
line = stream.readline().decode('utf-8', 'ignore')
self.resultsCtrl.AppendText(line)
wx.Yield()
Когда я запускаю этот код с недолговечным исполняемым файлом (например, ls
) Я получаю segfault на readline()
. Для длительной команды я не вижу segfault, но я также не вижу никаких результатов на дисплее (оба commandCtrl
и resultsCtrl
являются wx.TextCtrl
виджетами).
Я предполагаю segfault заключается в том, что поток удаляется после завершения выполнения команды, так как я могу убедиться, что я прочитал результаты перед удалением потока?
Для обновления я ожидал, что вызов wx.Yield()
разрешит обновление можно увидеть, поэтому либо текст не принимается (readline()
, либо дисплей не обновляется. Есть идеи, почему это так?