获取要在Qt小部件中显示的子流程的标准输出

我试图在Qt小部件中显示子进程中写到stdout的内容。


我正在以这种方式开始该过程:


import subprocess


subprocess.call(["program_name", "arguments"])

我想我必须让一个类像stdout一样工作,并在调用子流程时指出来,我尝试了以下方法:


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'对象没有属性'fileno'


除了重定向到文件然后有一个不定期读取文件的计时器外,我真的想不出任何其他主意。


MYYA
浏览 183回答 2
2回答

宝慕林4294392

最终这样: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 )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python