#python #python-3.x #subprocess #sys
#python #python-3.x #подпроцесс #sys
Вопрос:
Я создал master.py
для запуска других скриптов.
from subprocess import PIPE, STDOUT, run
def main():
command = ["python3", "file1.py"]
print("Executing: {}".format(command))
exit_code, output_string = run_command(command)
print(output_string)
command = ["python3", "file2.py"]
print("Executing: {}".format(command))
exit_code, output_string = run_command(command)
print(output_string)
command = ["python3", "file3.py"]
print("Executing: {}".format(command))
exit_code, output_string = run_command(command)
print(output_string)
print("Exiting master.py with status_code of {} because {NAME_OF_FILE_THAT_FAILED} failed.")
def run_command(command_to_run):
result = run(command_to_run, stdout=PIPE, stderr=STDOUT)
return result.returncode, result.stdout.decode()
if __name__ == "__main__":
main()
Я пытаюсь захватить sys.exit()
сценарий каждого подпроцесса, то есть захватить то file1.py
, file2.py
с чем и file3.py
выйти. Если все задания пройдены, то master.py
они будут существовать с 0
, но если хотя бы 1 дополнительное задание завершилось неудачно и завершилось с 1
, я хочу, чтобы основное задание также завершилось с 1.
Как только он захватит sys.exit
из всех вспомогательных заданий, основываясь на их результатах, я хотел бы напечатать эту ошибку в окончательном выводе мастера (оператор печати)
Комментарии:
1. У вас уже должно быть это
exit_code
.2. Спасибо за ответ @kichik Я вижу
exit_code
из дочерних сценариев, однако это не отражает это в главном сценарии. Как я могу этого добиться? Пример: еслиexit_code
возвращаемого значения нет0
, то это должен быть статус главного скрипта.
Ответ №1:
Если подпроцесс завершается с кодом состояния 1, значение будет сохранено result.returncode
. Вы можете получить сообщение об ошибке, также вернувшись result.stderr.decode()
в run_command()
master.py
Я полагаю, что вы можете просто управлять поведением после завершения каждого дочернего процесса, используя операторы if else .