QProcess выходит нормально
Я использую Python с qt, и я не могу выяснить, чтобы запустить сигнал, когда Qprocess завершится нормально. Согласно документации Pyqt, final () сигнал может принимать 2 аргумента: код выхода и код выхода.
Это то, что в документации Pyqt говорится о сигнале Finished()
http://pyqt.sourceforge.net/Docs/PyQt4/qprocess.html
void закончен (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 ответ
Вы не должны указывать на символ в соединении, но в слоте с помощью 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")