Я пытаюсь запустить процесс с подпроцессом и выводить весь вывод, если и только если возникает исключение.
Где я был раньше:
try:
proc = subprocess.run(
command,
capture_output=True,
check=True,
text=True,
)
except subprocess.CalledProcessError as error:
print(error.output)
Это не сработало,
Вывод, когда происходит subprocess.CalledProcessError:
b''
Замена capture_output с stdout = subprocess.PIPE выдает все, независимо от того, произошло исключение или нет, error.output все еще был пуст.
Итак, я экспериментировал:
Это выводит на печать все, что я увидел бы, если бы я выполнил команду в командной строке.
subprocess.run(
command,
stdout=subprocess.PIPE,
)
Это ничего не выводит.
proc = subprocess.run(
command,
capture_output=True,
)
print(proc.stdout.decode())
Я также попробовал subprocess.check_output (), который, по моим данным, делает то же самое, что и subprocess.run () с флагами, которые я установил в первом фрагменте кода.
Чего мне здесь не хватает?Спасибо.
Приложение
import subprocess
command = ['pandoc', 'file']
try:
proc = subprocess.run(
command,
capture_output=True,
check=True,
)
except subprocess.CalledProcessError as error:
print('Exception:')
print(error.output)
Это MWE с конкретным процессом, который я хочу запустить ( pandoc )
Вывод
$ pandoc file
pandoc: file: openBinaryFile: does not exist (No such file or directory)
$ ./samplecode.py
Exception:
b''
Таким образом, исключение срабатывает, но выходной объект пуст.