QProcess正常退出

时间:2018-12-20 22:43:13

标签: python python-3.x pyqt pyqt4 qprocess

我正在将python与qt配合使用,并且我无法找到在Qprocess正常退出时触发信号的方法,根据Pyqt文档,finished()信号可以使用2个参数exitCode代码和exitStatus

这是Pyqt文档所说的finish()信号

http://pyqt.sourceforge.net/Docs/PyQt4/qprocess.html#finished

无效(int,:: QProcess :: ExitStatus)

  

这是此信号的默认过载。

     

该过程结束时发出此信号。 exitCode是出口   流程的代码,exitStatus是退出状态。之后   进程已完成,QProcess中的缓冲区仍然完整。您   仍然可以读取该进程之前可能已写入的任何数据   完成。

QProcess.ExitStatus

  

此枚举描述了QProcess的不同退出状态。

     

常量..................值.........说明

     

QProcess.NormalExit ....... 0 .......进程正常退出。

     

QProcess.CrashExit ........ 1 .......进程崩溃。

我尝试使用这种语法,但是没有用

self.process.finished(0,QProcess_ExitStatus=0).connect(self.status)

备注:

状态就像任何插槽(任何动作)的符号一样,不是特定的

更新:

要了解这个问题,我有多个进程(将其视为队列),我需要python执行第一个进程,并且仅在前一个进程退出时才移至下一个进程,通常不使用强制退出kill()或终止()

预先感谢

1 个答案:

答案 0 :(得分:0)

在pyqtSlot的帮助下,您不必指向连接中的符号,而是在插槽中。

from PyQt4 import QtCore

class Helper(QtCore.QObject):
    def __init__(self, parent=None):
        super(Helper, self).__init__(parent)
        self.process = QtCore.QProcess(self)
        self.process.start("ping -c 4 google.com")
        self.process.finished.connect(self.status)

    @QtCore.pyqtSlot(int, QtCore.QProcess.ExitStatus)
    def status(self, exitCode, exitStatus):
        print(exitCode, exitStatus)
        QtCore.QCoreApplication.quit()

if __name__ == '__main__':
    import sys
    app = QtCore.QCoreApplication(sys.argv)
    h = Helper()
    sys.exit(app.exec_())

更新

from PyQt4 import QtCore

class Helper(QtCore.QObject):
    def __init__(self, parent=None):
        super(Helper, self).__init__(parent)
        self.process = QtCore.QProcess(self)
        self.process.start("ping -c 4 google.com")
        self.process.finished.connect(self.on_finished)

    @QtCore.pyqtSlot(int, QtCore.QProcess.ExitStatus)
    def on_finished(self, exitCode, exitStatus):
        if exitStatus == QtCore.QProcess.NormalExit:
            self.status()

    def status(self):
        print("status")