我正在尝试在子进程中写入 stdout 的内容,并显示在 Qt 小部件中。
我以这种方式开始这个过程:
import subprocess
subprocess.call(["program_name", "arguments"])
我想我必须创建一个类来像标准输出一样,并在我调用子进程时指出它,我试过这个:
class Log:
def __init__(self, qtWidget):
self.qtWidget = qtWidget
def write(self, data):
self.qtWidget.append(data)
# (...)
log = Log(theWidget)
sub.process.call(["program_name", "arguments"], stdout=log)
但我收到一条错误消息:AttributeError: 'Log' object has no attribute 'fileno'
除了重定向到文件然后有一个不时从中读取的计时器之外,真的想不出任何其他想法。
[编辑]
结束了这个:
process = QProcess()
process.setProcessChannelMode( QProcess.MergedChannels )
process.start( "program_name", [ "arguments" ] )
process.readyReadStandardOutput.connect( aFunction )
# then in the function...
outputBytes = process.readAll().data()
outputUnicode = outputBytes.decode( 'utf-8' )
messageWidget.append( outputUnicode )
谢谢您的帮助!