我正在将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()或终止()
预先感谢
答案 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")