2016-11-04 7 views
0

저는 시스템 관리자이며 파이썬을 사용하여 무언가를 얻으려고합니다. Qthread에서 bat 파일을 실행할 작은 파이썬 도구를 만들고 있습니다. GUI에서 출력/오류를 박쥐 파일에서 업데이트하려는 textedit 상자가 있습니다. 메인에서Qthread에서 Gui로 bat 파일 출력 업데이트

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

그러나 나는 점점 오전 - 형식 오류 : [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) 

에서

는 기본적으로 넣어 아웃 바이트이고 나는 문자열로 변환했다. 이 변화와 함께 예상대로 작동하지만 누군가가 더 나은 솔루션을 가지고 있다면 시도해보고 싶습니다. 다들 감사 해요.