1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| import collections
from PyQt4.QtCore import QProcess, pyqtSignal, pyqtSlot
class Process(QProcess):
read_line = pyqtSignal(str)
def __init__(self):
super().__init__()
self._queue = collections.deque()
self.readyReadStandardOutput.connect(self._has_data)
self.finished[int].connect(self._start_next)
@pyqtSlot()
def _has_data(self):
data = self.readAllStandardOutput()
for line in bytes(data).decode('utf-8').splitlines():
if line:
self.read_line.emit(line)
def start(self, command):
queue = self._queue
if not queue:
self.read_line.emit('start: %s' % command)
super().start(command)
queue.append(command)
@pyqtSlot(int)
def _start_next(self, exit_code):
queue = self._queue
queue.pop()
self.read_line.emit('*done*')
if queue:
self.read_line.emit('start: %s' % queue[0])
super().start(queue[0])
if __name__ == '__main__':
import sys
from PyQt4.QtGui import QApplication, QTextEdit
app = QApplication(sys.argv)
display = QTextEdit()
display.show()
process = Process()
process.read_line.connect(display.append)
process.start('python3 test.py"')
app.exec_() |
Partager