подпроцесс внутри подпроцесса. Как распространить вывод об ошибке? - PullRequest
1 голос
/ 20 мая 2019

Я использую подпроцесс для запуска скрипта.Но этот вызываемый скрипт сам использует подпроцесс для выполнения некоторых команд.Проблема в том, что когда я ловлю исключение во внешнем скрипте, он просто говорит, что в вызванном скрипте произошла ошибка.

Итак, мой вопрос: как я могу распространить ошибку из внутреннего сценария во внешний сценарий, чтобы я знал точную причину того, что произошло во внутреннем сценарии.

Вот какЯ ловлю исключения и выхожу по ошибке с подпроцессом.

try:
    output = subprocess.check_output(cmd)
except Exception as e:
    print(str(e))
    sys.exit(1)

1 Ответ

1 голос
/ 20 мая 2019

Если вы используете модуль Python subprocess, вы можете обрабатывать STDOUT, STDERR и код возврата команды по отдельности. Вы можете увидеть пример полной реализации вызывающей команды. Конечно, вы можете расширить его на try..except, если хотите.

Следующая функция возвращает код STDOUT, STDERR и Return, чтобы вы могли обрабатывать их в другом скрипте.

import subprocess

def command_caller(command=None)
    sp = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)
    out, err = sp.communicate()
    if sp.returncode:
        print(
            "Return code: %(ret_code)s Error message: %(err_msg)s"
            % {"ret_code": sp.returncode, "err_msg": err}
            )
        # You can raise an error if the return code of command is not zero.
        # raise Exception(
        #   "Return code: %(ret_code)s Error message: %(err_msg)s"
        #   % {"ret_code": sp.returncode, "err_msg": err}
        #   )
    return sp.returncode, out, err
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...