Pythonドキュメント で指定されているsubprocess.run()
を実行すると、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 このパラメーターはnotが存在するため、間違ったドキュメントを調べました documentation (左上でバージョンを選択します):
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 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