前言

subprocess 模块允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码。

操作系统:Windows 11 家庭中文版

参考文档

  1. subprocess — 子进程管理

使用 subprocess 模块

推荐的调用子进程的方式是在任何它支持的用例中使用 run() 函数。

1
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)

运行被 arg 描述的指令. 等待指令完成, 然后返回一个 CompletedProcess 实例.

1
2
3
4
5
6
7
8
9
10
11
>>> 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'')

class subprocess.CompletedProcess

run() 的返回值, 代表一个进程已经结束.

  • args: 被用作启动进程的参数. 可能是一个列表或字符串.
  • returncode: 子进程的退出状态码. 通常来说, 一个为 0 的退出码表示进程运行正常. 一个负值 -N 表示子进程被信号 N 中断 (仅 POSIX).
  • stdout: 从子进程捕获到的标准输出. 一个字节序列, 或一个字符串, 如果 run() 是设置了 encoding, errors 或者 text=True 来运行的. 如果未有捕获, 则为 None. 如果你通过 stderr=subprocess.STDOUT 运行进程,标准输入和标准错误将被组合在这个属性中,并且 stderr 将为 None。
  • stderr: 捕获到的子进程的标准错误. 一个字节序列, 或者一个字符串, 如果 run() 是设置了参数 encoding, errors 或者 text=True 运行的. 如果未有捕获, 则为 None.
  • check_returncode(): 如果 returncode 非零, 抛出 CalledProcessError.

结语

第一百六十五篇博文写完,开心!!!!

今天,也是充满希望的一天。