Python 库手册:subprocess 子进程管理模块

subprocess 是 Python 标准库中用于管理外部进程的模块,提供了强大的接口来创建子进程、连接它们的输入输出、获取执行结果等。它是对早期 os.system、os.spawn*、popen* 等模块的替代,推荐在所有子进程调用场景中使用。

常见应用场景:

(1)在 Python 中调用系统命令或脚本(如 ping、ls、ffmpeg 等)。

(2)捕获外部命令输出。

(3)构建自动化工具、脚本、测试框架。

(4)控制多个系统进程或实现进程间通信。

(5)结合其他命令行工具(如 Git、SSH、编译器等)完成开发或部署流程。

  ◆  ◆

核心概念

1、子进程(Subprocess)

指由当前 Python 脚本启动的外部系统进程,比如执行一个 shell 命令、运行另一个程序等。

2、Popen 类

subprocess 的核心类,用于启动子进程,并提供对其输入、输出、错误及退出状态的控制。

3、简化函数

如 run()、call()、check_output() 等是对 Popen 的封装,便于快速使用。

4、参数 stdout、stderr、stdin

用于控制子进程的输入输出流,可用于数据交互、重定向或捕获信息。

  ◆  ◆

应用举例

例 1:执行简单命令并输出结果

import subprocess
result = subprocess.run("echo Hello, world!", capture_output=True, text=True, shell=True)print("命令输出:", result.stdout.strip())

例 2:列出当前目录下所有文件(适配 Windows)

import subprocess
result = subprocess.run("dir", capture_output=True, text=True, shell=True)print("当前目录内容:")print(result.stdout)

例 3:调用外部可执行程序(如 Notepad)

import subprocess
# 启动记事本(非阻塞)subprocess.Popen("notepad.exe", shell=True)

例 4:与外部命令交互(传递输入)

import subprocess
# 使用 findstr 搜索关键字(Windows 中的 grep 替代)proc = subprocess.run("findstr Hello", input="Hello\nWorld\n", capture_output=True, text=True, shell=True)print("搜索结果:", proc.stdout.strip())

例 5:捕获错误输出

import subprocess
# 执行一个无效命令result = subprocess.run("wrong_command", capture_output=True, text=True, shell=True)
print("标准输出:", result.stdout)print("错误输出:", result.stderr)print("返回码:", result.returncode)

  ◆  ◆

常用函数速览

subprocess.DEVNULL

表示一个特殊的文件对象,指向操作系统的空设备(如 Windows 的 NUL)。用于丢弃输入/输出。

subprocess.PIPE

用于捕获子进程的标准输入、标准输出或标准错误。

subprocess.call(args, **kwargs)

执行命令并等待返回,返回退出码。

参数:

args:命令及参数的列表或字符串

kwargs:其他控制参数,如 cwd, timeout, shell

返回:整数类型,子进程的返回码(0 表示成功)

subprocess.check_call(args, **kwargs)

执行命令,若返回码不为 0,则抛出异常。

参数:同 call()

返回:成功时返回 0,否则抛出 CalledProcessError

subprocess.check_output(args, **kwargs)

执行命令并返回其输出(标准输出)。

参数:

args:命令参数

text=True:返回字符串而非字节串

返回:字符串或字节串(取决于参数设置)

subprocess.Popen(args, **kwargs)

启动子进程并返回 Popen 对象,可进行更细致的控制。

参数:

args:命令及参数

stdin, stdout, stderr:输入输出重定向

返回:Popen 实例对象

subprocess.run(args, **kwargs)

执行命令,等待其完成,返回 CompletedProcess 对象(推荐用法)。

参数:

args:命令及参数

capture_output=True:捕获 stdout 和 stderr

text=True:将输出转为字符串

check=True:自动抛出错误

Shell=Ture:可兼容 Windows 内置命令

返回:CompletedProcess 对象,包含 args、returncode、stdout、stderr 等属性

  ◆  ◆

补充说明

1、若使用 shell=True,建议传入字符串(而非列表),以避免命令解释错误。

Windows 系统的许多常见命令(如 dir、echo、findstr)并非独立可执行文件,而是内部命令,需通过 cmd.exe 执行,所以需设置 shell=True。

2、若需跨平台兼容,请使用 shutil.which() 检查命令是否存在,或基于平台动态修改命令。

3、Popen 是高级接口,适用于需要流式读取、进程通信、并发管理等场景。

4、若目标是后台任务管理或进程池,推荐结合 multiprocessing 或 concurrent.futures 使用。

Python 库手册:subprocess 子进程管理模块_第1张图片

“点赞有美意,赞赏是鼓励”

你可能感兴趣的:(python,开发语言)