web-dev-qa-db-fra.com

sous-processus: argument de mot clé inattendu capture_output

Lors de l'exécution de subprocess.run() comme indiqué dans le Python docs , j'obtiens un 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'

J'utilise Python 3.6.6:

$ python3 --version
Python 3.6.6
31
Tijs

Vous avez inspecté la mauvaise documentation car python-3.6 ce paramètre n'existe pas , comme on peut le trouver dans le documentation (vous sélectionnez la version en haut à gauche):

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)

Vous pouvez toutefois facilement "émuler" ceci en définissant stdout et stderr sur PIPE:

from subprocess import PIPE

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

En fait, si nous regardons le code source de la version python-3.7 , où la fonctionnalité a été introduite, nous voyons dans le code source [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
54
Willem Van Onsem