当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python subprocess.run用法及代码示例


用法:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)

运行 args 说明的命令。等待命令完成,然后返回 CompletedProcess 实例。

上面显示的参数只是最常见的参数,在下面的常用参数中进行了说明(因此在缩写签名中使用仅关键字表示法)。完整的函数签名与 Popen 构造函数的签名大致相同 - 此函数的大多数参数都传递给该接口。 (timeoutinputcheckcapture_output 不是。)

如果capture_output 为真,将捕获标准输出和标准错误。使用时,内部 Popen 对象会使用 stdout=PIPEstderr=PIPE 自动创建。 stdoutstderr 参数不能与 capture_output 同时提供。如果您希望捕获两个流并将其合并为一个,请使用 stdout=PIPEstderr=STDOUT 而不是 capture_output

timeout 参数传递给 Popen.communicate() 。如果超时,子进程将被杀死并等待。 TimeoutExpired 异常将在子进程终止后重新引发。

input 参数被传递给Popen.communicate(),从而传递给子进程的标准输入。如果使用它必须是字节序列,或者如果指定了encodingerrorstext 为真,则为字符串。使用时,内部 Popen 对象会使用 stdin=PIPE 自动创建,也可能不会使用 stdin 参数。

如果check 为真,并且进程以非零退出代码退出,则会引发CalledProcessError 异常。该异常的属性包含参数、退出代码以及标准输出和标准错误(如果它们被捕获)。

如果指定了encodingerrors,或者text 为真,则stdin、stdout 和stderr 的文件对象将使用指定的encodingerrorsio.TextIOWrapper 默认值以文本模式打开。 universal_newlines 参数等效于text 并提供向后兼容性。默认情况下,文件对象以二进制模式打开。

如果 env 不是 None ,则必须是为新进程定义环境变量的映射;这些用于代替继承当前进程环境的默认行为。它直接传递给 Popen

例子:

>>> subprocess.run(["ls", "-l"])  # doesn't capture output
CompletedProcess(args=['ls', '-l'], returncode=0)

>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
  ...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

>>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')

3.5 版中的新函数。

在 3.6 版中更改:添加encodingerrors参数

在 3.7 版中更改:添加了text参数,作为更易于理解的别名universal_newlines.添加了capture_output范围。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 subprocess.run。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。