Получение сообщения о выходе из одного скрипта Python при вызове из другого основного скрипта - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть мастер-скрипт на python, который использует subprocess.check_call для запуска еще пары небольших скриптов.

Я не хочу видеть вывод этих меньших скриптов, поэтому я использую stdout=DEVNULL

Я могу получить returncode, поймав CalledProcessError, но я бы хотел отследить пропущенное сообщение, если сценарий оканчивается, скажем sys.exit('my exit message')

Я не могу уловить это сообщение - возможно ли это даже в Python? Я бы предпочел не писать в файл, чтобы прочитать сообщение о выходе.

Это то, что я пробовал в моей master.py:

import subprocess
try:
    subprocess.check_call('python scripttoberun.py', shell=True, stdout=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
    print(e.args)
    print(e.output)
    print(e.stderr)
    print(e.returncode)
    print(e.cmd)

и по моему scripttoberun.py:

import sys
print('starting... ')
sys.exit('im quitting')

но я не могу уловить сообщение 'im quitting?

Я вижу только этот вывод:

(1, 'python scripttoberun.py')
None
None
1
python scripttoberun.py

Возможно ли это?

Большое спасибо!

1 Ответ

0 голосов
/ 30 апреля 2019

Мне удалось заставить это работать, мне пришлось передать параметр stderr=PIPE в функцию check_output.Затем, используя .decode() в исключении stderr, я могу получить сообщение.Perfecto

Вот мой код в master.py:

from subprocess import check_output, CalledProcessError, PIPE

try:
    check_output('python scripttoberun.py', stderr=PIPE)
    print('Program ran successfully')
except CalledProcessError as e:
    print('Program did not run successfully: ', e.stderr.decode())

...