python - 子进程:意外的关键字参数 capture_output

标签 python subprocess

当执行 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

最佳答案

您检查了错误的文档,这个参数确实存在,可以在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)

但是,您可以通过将 stdoutstderr 都设置为 PIPE 来轻松“模拟”:

from subprocess import <b>PIPE</b>

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

其实如果我们看一下的源代码引入该功能的版本,我们在 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/

相关文章:

python - 在 Python 中生成非常大的 XML 文件?

python - 带有外部 CSS 的 Django 模板;对分区中的图像使用 {%static%}

Python:子进程调用无法识别 * 通配符?

c++ - C++ 中的子进程命令

java - FASTQC 在命令行上运行,但不在 python 子进程中运行(Java 异常(exception))

python - `for` 循环如何在字典上具体工作

python - 解析大型 M3U 文件时遇到问题

python - Flask-admin 批处理操作,通过弹出模式窗口进行参数

python - 为什么在 Python 路径中需要 4 个反斜杠?

python - 写入文件,子进程。调用输出不返回任何内容