【问题标题】:PyQt: Async console output not captured with every applicationPyQt:不是每个应用程序都捕获异步控制台输出
【发布时间】:2015-07-27 18:55:37
【问题描述】:

我正在尝试以命令行模式启动 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,它会出于某种原因工作。

有什么想法吗?

【问题讨论】:

    标签: python asynchronous console pyqt pyqt5


    【解决方案1】:

    好吧,我认错了。在某些时候,IDE 的开发人员决定仅在指定的调试版本中输出我需要的信息……我实际上调用了错误的可执行文件……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多