我尝试在一个子进程中将写入stdout的内容显示在Qt小部件中。在
我是这样开始这个过程的:
import subprocess
subprocess.call(["program_name", "arguments"])
我想我必须创建一个类来充当stdout,并在调用subprocess时指出它,我尝试了以下方法:
^{pr2}$但我收到一个错误消息:AttributeError:'Log'对象没有属性'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 )
谢谢你的帮助!在
在subprocess模块中重定向输入/输出流的工作级别较低,因此只能传递具有fileno的filelike对象。在
如果要从python读取数据,可以使用^{} 而不是
subprocess.call
,这将以字节的形式返回写入进程的stdout中的数据:或者您可以使用^{} 并传递
^{pr2}$stdout=subprocess.PIPE
。然后可以从返回的对象stdout
读取数据:在子流程文档中应该有很多示例。在
编辑:
如果需要与Qt进行更紧密的集成,还可以使用^{} 来启动程序,而不是使用subprocess模块。这将允许您使用它的read channel的readyRead信号,以便在准备从进程中读取数据时得到通知。在
相关问题 更多 >
编程相关推荐