Segfault при чтении потока - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь получить вывод команды, которая выполняется в фоновом режиме, следующим образом:

    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(), либо дисплей не обновляется. Есть идеи, почему это так?

...