Как захватить sys.exit () из подпроцессов в Python? - PullRequest
1 голос
/ 12 апреля 2019

Я создал 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 Ответ

1 голос
/ 12 апреля 2019

Если подпроцесс завершается с кодом состояния 1, значение будет сохранено result.returncode.Вы можете получить сообщение об ошибке, также вернув result.stderr.decode() в run_command()

Для поведения master.py после завершения каждого дочернего процесса, я полагаю, вы можете просто контролировать его, используя операторы if else.

...