Python subprocess.Popen 详解

安全、灵活地在 Python 中执行外部命令

什么是 subprocess.Popen

subprocess.Popen 是 Python 标准库 subprocess 模块中的一个核心类, 用于创建新进程、连接到它们的输入/输出/错误管道,并获取返回码。 相比于 os.system()os.popen()Popen 更加灵活、安全且功能强大。

基本用法示例

运行一个简单的命令并获取输出:

import subprocess

# 启动子进程
proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 等待进程结束并读取输出
stdout, stderr = proc.communicate()

print("标准输出:")
print(stdout.decode('utf-8'))
print("标准错误:")
print(stderr.decode('utf-8'))

常用参数说明

安全提示

使用 shell=True 时,如果命令中包含用户输入,务必进行严格校验或转义,避免 命令注入攻击。 推荐使用命令列表形式(如 ['command', 'arg1', 'arg2'])而非字符串拼接。

不安全示例(避免):

# 危险!不要这样做
user_input = "file.txt; rm -rf /"
subprocess.Popen(f"cat {user_input}", shell=True)

安全做法:

import shlex
filename = "file.txt"
# 若必须用字符串,使用 shlex.split()
cmd = shlex.split(f"cat {filename}")
subprocess.Popen(cmd)  # shell=False(默认)

常见应用场景

替代方案建议

对于简单的一次性命令执行,推荐优先使用 subprocess.run()(Python 3.5+), 它更简洁且自动处理等待和异常:

result = subprocess.run(['echo', 'Hello'], capture_output=True, text=True)
print(result.stdout)
Python中int()函数的用法详解-完整指南 Pioneer 音箱使用说明-78TP操作指南与常见问题解答 如何加入SHEIN?78TP入驻指南与合作方式详解 日版还是美版iPhone质量好?全面对比分析 Shein是干嘛的?全面解析全球快时尚电商平台 You’re Nothing – 探索存在与虚无的边界 Python安装库指南-快速上手pip与常用命令 香港买iPhone攻略|最新价格、购买渠道与避坑指南 你非常有 Potential-发掘你的无限可能 Shein企业文化|创新、敏捷与全球时尚的融合 Pokémon HOME-宝可梦的云端家园 日版 iPhone 17 取消实体 SIM 卡:全面拥抱 eSIM 时代 Pioneer DJ-专业DJ设备与音乐创作先锋 Switch无法进入eShop?原因与解决方法全解析 “Champion”前面要不要加“The”?英语冠词用法详解 Python str转int方法详解-字符串转整数完整指南 美国版 iPhone 17 最新消息、功能亮点与发售信息-全面前瞻 Python IDE有哪些?主流Python集成开发环境推荐 新加坡 iPhone 购买指南与最新资讯|新加坡苹果手机专题 下载 Python-78TP最新版 Python 免费下载|快速开始编程 Python字符串转整数(int)方法详解-完整指南 Reputation的同义词大全-丰富表达你的语言 国家开放大学在线学习平台-www.one.ouchn.com iPhone三个摄像头怎么切换?详细操作指南|iPhone摄影技巧 台灣版 iPhone 17 預測與資訊專區|最新設計、規格與上市時間 PioneerDJ 软件下载-78TP最新版免费获取|DJ音乐制作利器 “Something”的发音详解|英语发音指南 iPhone Air 港版有卡槽-全面解析与购买指南 Python Web Server 入门指南-轻量、高效、易上手 Pioneer电视手机遥控器-用手机轻松控制您的Pioneer电视 Champion鞋质量好不好?真实评测与用户反馈 Shein公司介绍-全球领先的时尚电商平台 Pokémon GO 中文专题-探索现实世界,捕捉神奇宝贝! Python ctypes 教程-调用 C 函数的完整指南 Switch进入eShop指南-快速访问任天堂在线商店 深入解析:什么是 Explanation?| 全面理解解释的本质 lithosphere怎么发音?中文释义、音标与音频示范 Python 编译器与 IDE 推荐指南|高效开发必备工具 iPhone XR 属于苹果第几代?全面解析 iPhone 第12代产品 Champion怎么验货?正品鉴别全攻略-购物指南 Python中time模块的用法详解-时间处理入门指南 Python:将Series转换为DataFrame的完整指南 Python pip 升级指南-最新方法与常见问题解答 天猫iPhone17没国补了吗?最新补贴政策与购买指南 海南免税店iPhone便宜多少?最新价格对比与购买攻略 endorphins怎么读?发音、含义与作用全解析 为什么你喜欢大熊猫?——探索国宝的魅力 CenCorp公司-创新驱动未来,科技赋能企业 Python index() 函数详解-查找列表、字符串等序列中元素的位置 岩石圈(Lithosphere)-地球的坚硬外壳 iPhone 17 Pro 1TB 最新价格及配置详情-78TP首发信息 Alternation 与 Alteration:词义辨析与语言之美 港版 iPhone 16 官網價格詳情|最新上市資訊與購買指南 Pioneer先锋音响-高保真音质,源自日本的音频传奇 Shopee跟卖策略指南-防范与应对方法 Python训练题-提升编程能力的精选练习题 Champion内裤-舒适、透气、运动优选|Champion78TP推荐 Shopee头像设计灵感与设置指南-打造你的专属Shopee形象 港版 iPhone 能以旧换新吗?全面解析與換購指南|Apple 香港用戶必看 It Is Nice Doing Something – 发现生活中的美好小事 Python怎么导入time模块-入门指南与实用示例 You Are Nothing To Me-情感专题页面 Python3 Queue 详解:队列模块使用指南与实战示例 Potential近义词大全|英语词汇学习专题 Python中sep代表什么?详解print函数的sep参数用法 Shopee图片尺寸指南-优化商品主图、详情页与头像推荐尺寸 Python中bytes类型详解-字节操作入门指南 pigeon奶瓶怎么样?全面评测与使用体验分享 pigeonhole 短语详解-含义、用法与例句|英语学习专题 Python int代表什么?详解整数类型及其用法 港版 iPhone 17 Pro 价格|最新报价、购买指南与对比分析 做这些事真愉快-Pleasant to Do Something iPhone 17提前发货!最新消息与预订详情-科技快讯 Python强制类型转换int()详解-用法、示例与注意事项 Python strip() 方法详解-字符串去空格与字符清理指南 Python Turtle 库入门指南-轻松绘制图形与动画 Python Query 指南:高效数据查询与操作技巧 Champion全国门店查询-78TP授权零售店一览 Python文件怎么用IDLE打开-新手入门指南 Python如何安装模块:pip使用指南|新手入门教程 Professional-专业服务与解决方案|高效、可靠、值得信赖 iPhone Air 摄像头|革命性影像体验 Champion-百度百科 Expedition – Embark on Extraordinary Journeys Bon Appétit! — 探索全球美食与烹饪灵感 港版iPhone15今日报价|最新港行价格对比与购买指南 Python如何安装pip-完整指南 Something例句短语大全|常见用法与实用例句 新西兰iPhone 17:最新发布、价格与购买指南|2026前瞻 iPhone 第一代发布时间-历史上的科技里程碑 iPhone不发热机型推荐-告别发烫,畅享流畅体验 Champion牌子怎么样?全面评测与品牌历史介绍 Endorphin网名寓意-快乐、自由与内在力量的象征 Champion 代言人|78TP合作明星阵容 Python Object 类型详解-理解 Python 中一切皆对象 School Supplies 翻译大全-学习用品中英文对照指南 Python语法入门指南-快速掌握基础与核心语法 NS Online会员-享受任天堂Switch在线游戏与专属福利 Python dict() 函数详解-创建与操作字典的完整指南 Python 把 Object 转换成 int 的方法详解