subprocess.run函数介绍

发布时间:2026/9/12 5:11:46

subprocess.run函数介绍 前言subprocess.run 是 Python 3.5 引入的函数也是目前官方最推荐的用于执行外部命令如 Shell 命令、系统脚本、其他程序的方法。官方文档明确建议在大多数情况下应该优先使用 subprocess.run()而不是旧的 os.system、subprocess.Popen 或subprocess.check_output。 它就像一个“全能瑞士军刀”功能强大且用法灵活。示例importsubprocessdefrun_hive_query(cmd):try:# 执行命令捕获输出转为文本并要求失败时报错resultsubprocess.run(cmd,capture_outputTrue,textTrue,checkTrue,timeout3600# 设置 1 小时超时)# 如果成功返回标准输出returnresult.stdout.strip()exceptsubprocess.CalledProcessErrorase:# 如果 checkTrue 触发了异常可以分别拿到 stdout 和 stderrerror_msge.stderr.strip()ife.stderrelse未知错误raiseException(f命令执行失败 (返回码{e.returncode}):{error_msg})exceptsubprocess.TimeoutExpiredase:raiseException(f命令执行超时)核心参数详解subprocess.run 之所以全能是因为它有几个非常实用的参数1.capture_outputTrue: 同时捕获标准输出stdout和标准错误stderr。Python 3.7 引入以前的写法是stdoutsubprocess.PIPE,stderrsubprocess.PIPE。2.textTrue (或 encoding‘utf-8’): 将输入/输出作为字符串处理而不是字节bytes。3.checkTrue: 非常重要 默认情况下run 遇到命令执行失败返回码非0不会报错只会默默返回一个非0的 returncode。如果加上 checkTrue一旦命令失败它会自动抛出 subprocess.CalledProcessError 异常这就和 check_output 的行为一样了。4.timeoutN: 设置超时时间秒。如果命令执行超过 N 秒还没结束会抛出TimeoutExpired 异常。防止程序卡死。5.shellTrue: 允许你直接传入一个完整的字符串命令比如 “ls -l | grep txt”而不是列表。警告 除非必要尽量少用如果字符串里包含用户输入会有严重的安全漏洞Shell 注入。核心返回值CompletedProcess 对象subprocess.run 执行完毕后会返回一个 CompletedProcess 对象。这个对象包含了命令执行的所有关键信息result.returncode: 退出状态码0 通常表示成功非 0 表示失败。result.stdout: 标准输出的内容需要配合 capture_outputTrue 使用。result.stderr: 标准错误的内容需要配合 capture_outputTrue 使用。result.args: 你原本传递进去的命令subprocess.check_output和subprocess.run的区别run 是 Python 3.5 之后引入的“全能瑞士军刀”而 check_output 是一个专门为了“获取输出”而存在的快捷函数。以下是具体的区别对比返回值不同 (最直观的区别)subprocess.run返回一个 CompletedProcess 对象。这个对象包含了命令执行的所有信息比如返回码 (returncode)、标准输出 (stdout)、标准错误 (stderr)。你需要通过 .stdout 属性才能拿到具体的输出内容。subprocess.check_output直接返回命令的标准输出内容字符串或字节串。默认的错误处理方式不同subprocess.run默认情况下如果外部命令执行失败返回码非 0它不会报错而是正常返回一个 CompletedProcess 对象只是里面的 returncode 不是 0。如果你想让它报错必须手动加上 checkTrue 参数。subprocess.check_output顾名思义带有 check如果命令执行失败它一定会抛出 subprocess.CalledProcessError 异常。importsubprocess# 直接拿到字符串结果如果失败会自动抛出异常result_textsubprocess.check_output([echo,hello],textTrue)print(result_text)# 需要指定 capture_outputTrue 才会捕获输出# 需要指定 checkTrue 才会像 check_output 一样在失败时报错# 最后需要加上 .stdout 才能拿到具体的文本resultsubprocess.run([echo,hello],capture_outputTrue,textTrue,checkTrue)result_textresult.stdoutprint(result_text)
延伸阅读

更多相关文章

2026/9/12 5:11:00

UE5 GAS中基于MMC的动态属性调整系统设计与实现

1. 项目概述:为什么我们需要一个动态的属性调整系统?做RPG游戏,尤其是那种角色会升级、装备会更换、天赋能点亮的,最头疼的问题之一就是属性计算。你肯定遇到过:玩家升了一级,攻击力加了10点,但…

2026/9/10 17:00:24

TI AM570x DDR3 PCB设计实战:从堆叠到等长的信号完整性指南

1. 项目概述与核心挑战在嵌入式系统,尤其是像TI AM570x系列这样集成了Cortex-A15核心的高性能应用处理器设计中,DDR3内存子系统往往是决定整个系统稳定性和性能上限的关键。我经手过不少基于AM5708的工业网关和视觉处理项目,几乎每一次&#…

2026/9/10 20:51:36

一张图看懂TOGAF元模型主要实体之间的关系

本文对TOGAF 元模型的主要实体元素之间的关系进行解读,并对元模型中提及的重要概念进行名词解释或者举例说明。为保证语言通俗易懂,用一家加工螺丝钉的生产企业“螺丝霸王”为例举例说明,以便降低理解难度。(图片来源:…

2026/9/12 5:09:51

QML ListView实现可拖拽TabBar的完整方案

简介:本资源是一份面向Qt/QML开发者的技术实践Demo,聚焦于解决QML中TabBar标签无法原生拖拽交换位置的痛点问题。不同于QWidget体系下的QTabBar,QML TabBar需借助ListView自定义实现拖拽移动、动态增删页及内容同步切换功能,适用于…

2026/9/12 5:09:51

激光熔覆熔池流动的Comsol多物理场模拟:从方程到实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 5:09:51

SpringBoot+Vue全栈二手书商城开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 5:09:51

深入解析计算机内存管理机制与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 5:04:51

工业级安全锥检测系统:YOLOv8基线与模型沙盒工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码