PyQt:并非每个应用程序都捕获异步控制台输出
PyQt: Async console output not captured with every application
我正尝试在命令行模式下启动 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 class 看起来像这样:
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,它会出于某种原因起作用。
有什么想法吗?
好的,我认错了。在某些时候,IDE 的开发人员决定只在指定的调试版本中输出我需要的信息...我实际上调用了错误的可执行文件...
我正尝试在命令行模式下启动 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 class 看起来像这样:
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,它会出于某种原因起作用。
有什么想法吗?
好的,我认错了。在某些时候,IDE 的开发人员决定只在指定的调试版本中输出我需要的信息...我实际上调用了错误的可执行文件...