подпроцесс: неожиданный аргумент ключевого слова capture_output - PullRequest
0 голосов
/ 08 ноября 2018

При выполнении subprocess.run(), как указано в Документах Python , я получаю TypeError:

>>> import subprocess
>>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.6/subprocess.py", line 403, in run
    with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'capture_output'

Я использую Python 3.6.6:

$ python3 --version
Python 3.6.6

1 Ответ

0 голосов
/ 08 ноября 2018

Вы проверили неправильную документацию, для этот параметр не существует, как можно найти в документации (вы выбираете версию в вверху слева):

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None,
               shell=False, cwd=None, timeout=None, check=False, encoding=None,
               errors=None, env=None)

Однако вы можете легко «эмулировать» это, установив для stdout и stderr значение PIPE:

from subprocess import <b>PIPE</b>

subprocess.run(["ls", "-l", "/dev/null"], stdout=<b>PIPE</b>, stderr=<b>PIPE</b>)

Фактически, если мы посмотрим на исходный код версии , где была представлена ​​эта функция, мы увидим в исходном коде [GitHub] :

if capture_output:
    if ('stdout' in kwargs) or ('stderr' in kwargs):
        raise ValueError('stdout and stderr arguments may not be used '
                         'with capture_output.')
    kwargs['stdout'] = PIPE
    kwargs['stderr'] = PIPE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...