Как захватить вывод exit () - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю с кодом, который, как утверждает мой клиент, изменить нельзя. Его нужно вызывать с помощью команды python, такой как subprocess.call () ... Код включает использование функции exit (). При выходе функция exit () содержит данные в качестве параметра:

exit(data)

Как мне записать параметр данных, который используется сценарием при вызове exit (), без изменения кода для использования возврата или чего-либо еще? как это?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Из документов для exit:

exit(code=None) ... при вызове поднимите SystemExit с указанным кодом выхода.

Из документов для SystemExit:

Если значение является целым числом, оно указывает состояние выхода из системы (передается функции C exit()); если это None, статус выхода равен нулю; если он имеет другой тип (например, строку), значение объекта печатается, и состояние выхода равно 1.

Таким образом, ответ зависит от того, является ли data целым числом или нет. Если это целое число, то это код выхода подпроцесса; см. этот вопрос о том, как получить его от subprocess. Если data не является целым числом, то оно выводится в stderr; см. этот вопрос о том, как получить его от subprocess.

0 голосов
/ 04 февраля 2020

Если ваши данные являются действительным кодом выхода (т. Е. Числом в 0-127, я полагаю), то вы можете получить код выхода через API subprocess в качестве возвращаемого значения функции вызова:

>>> import subprocess
>>> subprocess.call(['python3', '-c', 'exit(24)'])
24

Если это не так, то он будет распечатан, поэтому, возможно, самый простой способ - захватить stderr процесса и разобрать его оттуда.

...