#python #subprocess #stdout #pygtk
#питон #подпроцесс #выход из строя #пигтк
Вопрос:
Код выполняется, и выходной файл также генерируется, но передняя часть приложения-это сценарий декодера зависания, который также выполняется в задней части, и информация также хранится в файле.
Проблема в том, что когда я убиваю декодер процесса kill -9, информация отображается в текстовом поле, и приложение также запущено, но я должен физически убить декодер в терминале, но я хочу отображать информацию, когда я нажимаю кнопку, то же самое, что и в файле, и в то же время ее отображение в поле textedit.
from subprocess import Popen,PIPE class demo(QWidget) def __init__(self): QWidget.__init__(self) self.program_output = QPlainTextEdit() self.program_output.setReadOnly(True) self.program_output.setCenterOnScroll(True) self.decode_btn = ThickPushButton('Decode') self.decode_btn.clicked.connect(self.decode_scan) @pyqtSlot(bool) def decode_scan(self, checked): print('Decoder Click') self.decode_btn.setChecked(checked) if checked: #self.process_timer.stop() #self.pre_process() print('Running Tetra Decoder:') #self.logger.debug('Start else') #proc = subprocess.Popen(['/mnt/encrypted_fs/scripts/decoder']) #with open('test.log', 'wb') as f: self.process() self.process_timer.stop() self.proc = subprocess.Popen(['/mnt/encrypted_fs/scripts/decoder'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE) #proc.wait() for line in iter(self.proc.stdout.readline, b''): sys.stdout.write(line.decode(sys.stdout.encoding)) self.proc.wait() #sleep(1) self.pre_process() self.process_timer.start() #self.logger.debug('End else') else: print('Decoder Stopped') if self.proc: subprocess.Popen(f'sudo kill -9 {self.proc.pid 1}', shell=True).wait() #self.proc = none