Я использую скрученный, чтобы вызвать локальный процесс, который может быть прерван в некоторых условиях.Как я могу получить код выхода из скрученного процесса появления, который может быть прерван неожиданным?
У меня есть обычай twisted.internet.protocol.ProcessProtocol
класс для реактора. Если локальный процесс резко прекратился, я не могу получить возвращаемое значение в processEnded
. Значение exitCode
установлено равным None
.
MCV пример, как это:
from twisted.internet import error,protocol,reactor
class MyPP(protocol.ProcessProtocol):
def processEnded(self, reason):
if reason.check(error.ProcessTerminated):
err_info = "wrong termination: %s; exitCode: %s; signal: %s" % \
(reason, reason.value.exitCode, reason.value.signal)
print(err_info)
else:
print("processEnded, status %d" % (reason.value.exitCode,))
print("quitting")
reactor.stop()
pp = MyPP()
reactor.spawnProcess(pp, "throw_exception", ["throw_exception"], {})
reactor.run()
И throw_exception
исполняемым может быть собран из:
#include <iostream>
int main() {
throw std::runtime_error("some exception");
return 0;
}
Выполнить пример питона напечатает
неправильное окончание: [ Экземпляр сбоя: Traceback (сбой без кадров):: Процесс закончил с вероятным условием ошибки: процесс закончился сигналом 6. ]; exitCode: None; сигнал: 6
Пример C++ будет иметь возвращаемое значение 134 при запуске в оболочке, что означает, что отправлено SIGABRT
(6). (Я также протестировал отправку SIGINT
, чтобы завершить и до сих пор не получить код выхода.)
Как я могу получить его в экземпляре ProcessProtocal
? Или это невозможно?
Итак ... вы хотите 134 вместо 6? Или что? –
@ Jean-PaulCalderone Я хотел бы получить 134 или любое другое возвращаемое значение в экземпляре протокола скрученного процесса, а не 'None' в приведенном выше примере. – halfelf