PyQt: вывод асинхронной консоли не фиксируется каждым приложением

Я пытаюсь запустить Arduino IDE в режиме командной строки и вернуть стандартный вывод в свое приложение PyQt следующим образом:

def recvConsoleOutput(self, output):
    print(output)

def upload(self):
    [...]
    cmd = [ARDUINO_PATH,
           '--verbose',
           '--upload', os.path.join(os.getcwd(), 'sketch', 'sketch.ino'),
           '--port', self.serialPort.currentText(),
           '--board', 'arduino:avr:leonardo']
    cmd = ' '.join(cmd)

    proc = AsyncProcess(cmd, self.recvConsoleOutput, parent=self)
    proc.start()

Он вызывается внутри функции QMainWindow и работает безупречно (Arduino IDE загружает скетч!), за исключением того факта, что он не выводит никаких сообщений, как это происходит при вызове из обычной командной строки Windows.

Класс AsyncProcess выглядит так:

from PyQt5.QtCore import QObject
from PyQt5.Qt import QProcess


class AsyncProcess(QObject):
    def __init__(self, path, slot, parent=None):
        super().__init__(parent)
        self.path = path
        self.proc = None
        self.slot = slot

    def start(self):
        self.proc = QProcess(self)
        self.proc.readyReadStandardOutput.connect(self.readStandardOutput)
        self.proc.readyReadStandardError.connect(self.readStandardError)
        self.proc.start(self.path)

    def readStandardOutput(self):
        procOutput = self.proc.readAllStandardOutput()
        self.slot(procOutput)

    def readStandardError(self):
        procOutput = self.proc.readAllStandardError()
        self.slot(procOutput)

По какой-то причине это работает, если я запускаю «ping 127.0.0.1» вместо Arduino.

Любые идеи?


person sonovice    schedule 19.07.2015    source источник


Ответы (1)


Хорошо, моя вина. В какой-то момент разработчики IDE решили выводить нужную мне информацию только в обозначенной отладочной версии... На самом деле я вызывал не тот исполняемый файл...

person sonovice    schedule 23.07.2015