2016-11-04 5 views
0

私はシステム管理者です。これはPythonを使用して何かを達成しようとしているとき初めてです。私はQthreadでbatファイルを実行する小さなpythonツールを開発しています。 GUI上では、batファイルから出力/エラーを更新したいtexteditボックスがあります。メインからQthreadからGuiへのバットファイルの出力を更新する

class runbat(QtCore.QThread): 
    line_printed = QtCore.pyqtSignal(str) 
    def __init__(self,): 
     super(runbat, self).__init__() 
    def run(self): 
     popen = subprocess.Popen("install.bat", stdout=subprocess.PIPE, shell=True) 
     lines_iterator = iter(popen.stdout.readline, b"") 
     for line in lines_iterator: 
     self.line_printed.emit(line) 

- - ここで

は、私がこれまで持っているコード、

QThreadです

self.batfile.line_printed.connect(self.batout) 

def batout(self, line): 
    cursor = self.ui.textEdit.textCursor() 
    cursor.movePosition(cursor.End) 
    cursor.insertText(line) 
    self.ui.textEdit.ensureCursorVisible() 

が、私は取得しています - 例外TypeError:[STR] runbat.line_printed。 emit():引数1に予期しない型 'bytes'があります。別の質問は、stdoutがエラーをキャッチするか出力するだけで、エラーをキャッチするために何が必要なのでしょうか?

答えて

0

大丈夫だったので、コードを変更して動作させることができました。メイン

def batout(self, line): 
    output = str(line, encoding='utf-8') 
    cursor = self.ui.textEdit.textCursor() 
    cursor.movePosition(cursor.End) 
    cursor.insertText(output) 
    self.ui.textEdit.ensureCursorVisible() 

Qthread

line_printed = QtCore.pyqtSignal(bytes) 

基本的にアウトプットは、バイト単位でだったと私は、文字列に変換する必要がありました。しかし、このように期待されるように動作しますが、誰かがより良い解決策を持っていれば、私はそれを試してみたいと考えています。皆さん、ありがとうございました。

関連する問題