QProcess выходит нормально - PullRequest
0 голосов
/ 21 декабря 2018

Я использую python с qt, и я не могу найти способ запустить сигнал, когда Qprocess завершается нормально. Согласно документации Pyqt, сигнал complete () может принимать 2 аргумента: код выхода и код выхода exitStatus

Эточто в документации Pyqt говорится о сигнале complete ()

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

void done (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 () или terminate ()

Заранее спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

Вы не должны указывать на символ в соединении, но в слоте с помощью 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")
...