Python3 subprocess 模块详解

news/2025/11/19 10:08:55/文章来源:https://www.cnblogs.com/xtcoding/p/19241045

Python3 subprocess 模块详解

Python 的 subprocess 模块用于创建新进程、连接到它们的输入 / 输出 / 错误管道,并获取它们的返回码。它是 Python 中替代 os.system()os.popen() 等旧有进程管理函数的推荐方式,提供了更强大、更灵活的进程控制能力。

核心功能与常用函数

subprocess 模块的核心是创建子进程,主要通过以下函数实现:

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)

Python 3.5+ 新增的推荐函数,封装了大多数常见场景,返回一个 CompletedProcess 对象(包含进程执行结果)。
 
  • 关键参数
    • args:要执行的命令,可为字符串(需配合 shell=True)或列表(推荐,避免命令注入风险)。例如:["ls", "-l"] 或 "ls -l"(需 shell=True)。
    • shell:是否通过系统 shell 执行命令。shell=True 时,args 可为字符串(支持管道 |、通配符 * 等 shell 语法),但存在安全风险(如命令注入)。
    • stdout/stderr:子进程的标准输出 / 错误流的处理方式:
      • None(默认):继承父进程的输出(直接打印到控制台)。
      • subprocess.PIPE:捕获输出,可通过 CompletedProcess.stdout 获取。
      • subprocess.STDOUT:将 stderr 合并到 stdout 中。
    • capture_output:等价于 stdout=PIPE, stderr=PIPE(Python 3.7+),方便捕获输出。
    • check:若为 True,当子进程返回码非 0 时,会抛出 subprocess.CalledProcessError 异常。
    • encoding/text:指定编码(如 encoding="utf-8" 或 text=True),使输出为字符串(否则为字节流 bytes)。
    • timeout:设置超时时间(秒),超时会抛出 subprocess.TimeoutExpired 异常。
    • cwd:指定子进程的工作目录。
    • env:设置子进程的环境变量(字典类型,默认继承父进程环境变量)。
  • 返回值CompletedProcess 对象,包含:
    • returncode:子进程返回码(0 表示成功)。
    • stdout:捕获的标准输出(字符串或字节流,取决于 encoding)。
    • stderr:捕获的标准错误(同上)。

2. 其他常用函数(旧版,推荐优先使用 run()

  • subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, ...):类似 run(),但仅返回子进程的返回码(不捕获输出,除非指定 stdout=PIPE)。
  • subprocess.check_call(args, ...):等价于 run(args, check=True),返回码非 0 时抛出异常。
  • subprocess.check_output(args, ...):等价于 run(args, check=True, stdout=PIPE),返回子进程的 stdout 输出(字符串或字节流)。

典型使用场景

场景 1:执行命令并获取返回码 

import subprocess# 执行 "ls -l" 命令(Linux/Mac),Windows 可替换为 "dir"
result = subprocess.run(["ls", "-l"])
print("返回码:", result.returncode)  # 0 表示成功
 

场景 2:捕获命令输出(stdout/stderr) 

import subprocess# 捕获 stdout 和 stderr(字符串形式)
result = subprocess.run(["echo", "Hello, subprocess!"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8"
)
print("输出:", result.stdout)  # 输出:Hello, subprocess!
print("错误:", result.stderr)  # 输出:空(无错误)
 

场景 3:使用 shell 语法(管道、通配符等)

import subprocess# 使用 shell 管道(需 shell=True)
result = subprocess.run("ls -l | grep .py",  # 查找当前目录下的 .py 文件shell=True,stdout=subprocess.PIPE,encoding="utf-8"
)
print("Python 文件:", result.stdout)
 

场景 4:检查命令是否执行成功(自动抛异常)

import subprocesstry:# 执行一个不存在的命令,会抛异常subprocess.run(["invalid_command"],check=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
except subprocess.CalledProcessError as e:print(f"命令执行失败,返回码:{e.returncode}")print(f"错误信息:{e.stderr}")
 

场景 5:设置超时时间

import subprocesstry:# 执行一个耗时命令(如 sleep 5),设置超时 2 秒subprocess.run(["sleep", "5"],  # Linux/Mac 命令,Windows 可替换为 "timeout 5"timeout=2)
except subprocess.TimeoutExpired:print("命令超时!")
 

场景 6:与子进程交互(输入数据)

import subprocess# 向子进程输入数据(如通过 echo 传递给 grep 过滤)
result = subprocess.run(["grep", "world"],  # 过滤包含 "world" 的行input="hello\nworld\npython",  # 输入给子进程的数据stdout=subprocess.PIPE,encoding="utf-8"
)
print("过滤结果:", result.stdout)  # 输出:world
 

注意事项

  1. 安全风险shell=True 时,若 args 包含用户输入,可能导致命令注入攻击(例如 args = f"ls {user_input}",若用户输入 ; rm -rf / 会执行危险命令)。尽量使用列表形式的 args 并避免 shell=True
  2. 编码问题:若不指定 encodingstdout/stderr 为字节流(bytes),需用 .decode("utf-8") 转换为字符串。
  3. 资源释放:对于长时间运行的子进程,需确保及时释放资源,避免僵尸进程(可通过 communicate() 或等待进程结束处理)。
  4. 跨平台兼容性:不同操作系统的命令不同(如 ls vs dir),需注意适配。
 
subprocess 模块通过灵活的参数配置,几乎能满足所有进程管理需求,是 Python 中处理外部命令的核心工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/969745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月豆包搜索排名优化对比分析:基于权威数据的十大企业全景评估

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月geo优化服务商排行榜:十大优质企业综合实力与长期发展指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年评价高的建筑变形缝厂家推荐及选择指南

2025年评价高的建筑变形缝厂家推荐及选择指南 行业背景与市场趋势 建筑变形缝作为现代建筑中不可或缺的组成部分,主要用于应对建筑物因温度变化、沉降、地震等因素产生的结构变形。随着我国建筑行业的持续发展,高层…

【每日一面】如何解决内存泄漏

基础问答 问:有没有遇到过内存泄漏?怎么排查处理的 答:前端页面上出现内存泄露,使用 Chrome devtools -> memory 工具排查,选择时间轴分配(Allocations on timeline)功能后开始录制操作,在页面上进行相关组…

2025年热门的刀刮布篷布设备最新TOP品牌厂家排行

2025年热门的刀刮布篷布设备最新TOP品牌厂家排行行业背景与市场趋势随着全球户外休闲产业、建筑临时设施和水产养殖业的快速发展,刀刮布篷布设备市场迎来了新一轮增长。据《2024-2029年全球篷布设备市场预测报告》显示…

2025年11月geo优化服务商推荐榜:十大服务商综合实力与行业口碑全解析

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年11月豆包搜索排名优化推荐:十大服务商综合评测与技术实力全解析

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。评选标准绝非主观臆断,我们建立了严格的四维评估…

2025年新疆残膜回收机公司权威推荐榜单:棉花残膜回收机/北疆残膜回收机/粉杆收膜打包一体机源头厂家精选

随着新疆农业现代化进程的加快和农田环境保护要求的提高,残膜回收机市场呈现稳定增长态势。作为治理农田"白色污染"的关键装备,残膜回收机的技术水平和产品质量直接关系到农业可持续发展水平。本文将基于市…

2025 最新火花机厂家推荐榜:新型 / 镜面 / 数控 / 五轴联动等全品类优选,权威测评助力精密加工选型

引言 在全球精密制造产业升级的浪潮下,火花机作为复杂零部件成型、高精度模具加工的核心设备,市场需求持续保持两位数增长。然而,市场上品牌鱼龙混杂、技术参数虚标等问题,让企业选型面临诸多挑战。本次推荐基于国…

力扣算法 2154题 将找到的值乘以2

力扣算法 2154题 将找到的值乘以2 题目: 给你一个整数数组 nums ,另给你一个整数 original ,这是需要在 nums 中搜索的第一个数字。 接下来,你需要按下述步骤操作:如果在 nums 中找到 original ,将 original 乘以…

2025年11月geo优化公司排行榜:头部服务商技术迭代与长期发展指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

78.15kW光伏系统采用扰动观察法实现最大功率点跟踪的解决方案

针对78.15kW光伏系统采用扰动观察法(Perturb and Observe, P&O)实现最大功率点跟踪(MPPT)的解决方案一、设计 1. 硬件组成模块 技术参数 功能说明光伏阵列 78.15kW, 600V DC输出 最大功率点跟踪目标DC-DC变换器…

2025年知名的150吨地磅厂家推荐及采购参考

2025年知名的150吨地磅厂家推荐及采购参考行业背景与市场趋势随着物流运输、矿产开采、建筑建材等行业的快速发展,大型称重设备市场需求持续增长。据中国衡器协会2024年发布的行业报告显示,2023年我国地磅市场规模达…

2025年松木猫砂生产厂家权威推荐榜单:无尘矿砂/豆腐猫砂/水晶猫砂源头厂家精选

在宠物用品市场持续增长的背景下,松木猫砂凭借天然环保、高效吸臭、可冲厕降解等特性,成为越来越多养宠家庭的选择。行业数据显示,2025年全球木质猫砂市场年复合增长率预计达10.2%,其中中国市场规模约占全球份额的…

2025年11月geo优化公司排行榜:十大优质服务商综合能力与发展前景指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年新疆大马力拖拉机公司权威推荐榜单:凯尔3004拉犁/新疆拖拉机/凯尔拖拉机源头厂家精选

随着新疆农业现代化进程的加快和农机补贴政策的持续推动,大马力拖拉机市场呈现稳定增长态势。作为大型农场、农业合作社的主要耕作动力,大马力拖拉机的技术水平和产品质量直接关系到农业生产效率。本文将基于市场数据…

2025年11月geo优化公司排行榜:基于多维度评估的十大优质服务商选择指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年评价高的GY1B25ADM比例阀厂家最新推荐排行榜

2025年评价高的GY1B25ADM比例阀厂家最新推荐排行榜行业背景与市场趋势随着工业自动化水平的不断提升,比例阀作为流体控制系统的核心元件,在制造业中的应用日益广泛。据《2024-2025中国工业流体控制设备市场研究报告》…

Ubuntu18.04安装Grafana12

Ubuntu18.04安装Grafana12Ubuntu18.04安装Grafana12 一、安装前准备 1.1 更新系统:sudo apt update1.2 安装依赖:sudo apt install -y apt-transport-https software-properties-common wget二、添加Grafana官方APT存…