QProcess正常退出

问题描述 投票:2回答:1

我正在使用qt的python而且当Qprocess正常退出时我无法找到发出信号的方法,根据Pyqt文档,finish()信号可以带2个参数exitCode代码和exitStatus

这就是Pyqt文档中关于finished()信号的说法

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

void 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(),则只需要移动到下一个进程或终止()

提前致谢

python python-3.x pyqt pyqt4 qprocess
1个回答
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")
© www.soinside.com 2019 - 2024. All rights reserved.