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")
Другие вопросы по тегам