Извлечь список аргументов Python subprocess.CalledProcessError

1

Ниже приведен фрагмент кода из нашей базы кода.

# global library function
def check_call_noout(params, acceptable_exit_codes = (0,), shellCommand=False):
    FNULL = open('/dev/null', 'w')
    sts = 1
    try:
        if shellCommand:
            p = subprocess.Popen(params, stdout=FNULL, stderr=FNULL,shell=True)
        else:
            p = subprocess.Popen(params, stdout=FNULL, stderr=FNULL)
        sts = os.waitpid(p.pid, 0)[1]
    except:
        raise
    finally:
       FNULL.close()
       exit_code = sts >> 8
       if exit_code not in acceptable_exit_codes:
           raise subprocess.CalledProcessError(exit_code, params)

# driver code
try:
    cmd = ["/bin/tar", "--acls", "--selinux", "--xattrs", "-czf a.tar.gz", "./a.xml", "--exclude","\"lost+found\""]
    check_call_noout(cmd,(0,1),False)
except subprocess.CalledProcessError as e:
    print e.output, e.returncode
except Exception as e:
    print(type(e).__name__, e)

Я хочу напечатать значение аргумента params, переданное в объект subprocess.CalledProcessError, который вызывается внутри библиотечной функции и попадает в мой код драйвера.

Однако я не могу ничего изменить в библиотечной функции check_call_noout()

Теги:
subprocess

1 ответ

2
Лучший ответ

Если я правильно понимаю, получение атрибута __dict__ класса subprocess.CalledProcessError сделает:

try:
    subprocess.run([...], check=True)
except subprocess.CalledProcessError as e:
    print(e.__dict__)

Вы также можете использовать функцию vars которая будет вызывать __dict__ внутри:

try:
    subprocess.run([...], check=True)
except subprocess.CalledProcessError as e:
    print(vars(e))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню