Ниже приведен фрагмент кода из нашей базы кода.
# 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()
Если я правильно понимаю, получение атрибута __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))
CalledProcessError.cmd
?