1

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' 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 )

助けてくれてありがとう!

4

1 に答える 1