Я хочу позволить пользователю моей программы указать, должен ли вывод быть подробным или нет. То есть, те подпроцессы запуска печатают весь вывод, который они генерируют или нет.
Я имел обыкновение делать:
out = subprocess.DEVNULL
if verbose:
out = subprocess.STDOUT
subprocess.run(['ls','-la'],stderr=out,stdout=out)
Но это приводит к этой ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 9] Bad file descriptor
Я смог сузить ошибку до:
subprocess.run(['ls','-la'],stdout=out)
Т.е. определение того, что вывод должен go на стандартный вывод, приводит к этой проблеме. Это было не так в ранних версиях (т. Е. <3.8) Python. </p>
Это сделано по замыслу, и как я могу все же добиться многословного / не многословного различия, не удваивая вызовы subprocess.run