当执行 Python docs 中给出的 subprocess.run()
时,我得到一个类型错误:
>>> 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这个参数确实不存在,可以在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 <b>PIPE</b>
subprocess.run(["ls", "-l", "/dev/null"], stdout=<b>PIPE</b>, stderr=<b>PIPE</b>)
其实如果我们看一下python-3.7的源代码引入该功能的版本,我们在 source code [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
关于python - 子进程:意外的关键字参数 capture_output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53209127/