1. ホーム
  2. python

[解決済み] subprocess: 予期しないキーワード引数 capture_output

2023-04-03 13:58:13

質問

を実行するとき 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

どのように解決するのですか?

間違ったドキュメントを閲覧しました。 python-3.6 このパラメータは ではなく が存在しないため のドキュメントにあるように (で見ることができます(左上でバージョンを選択します)。

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)

しかし、このようなエミュレートは stdoutstderr から PIPE :

from subprocess import PIPE

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

実際に、ソースコードを見てみると python-3.7 バージョンのソースコードを見てみると、この機能が導入された のソースコード[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