subprocess.check_output函数介绍
前言在 Python 中subprocess 是一个非常强大的内置标准库。它的主要作用是在 Python 代码中执行外部的命令和程序就像你在终端或命令行里敲命令一样。subprocess.check_output 是subprocess 模块中一个非常实用的便捷函数。它的核心作用是执行外部命令并直接返回该命令的标准输出stdout。如果命令执行失败返回码非 0它会自动抛出异常。基本用法默认情况下check_output返回的是字节串(bytes)在python3中我们通常会加上textTrue,让它直接返回字符串。importsubprocess# 执行命令获取输出# textTrue 会将返回的 bytes 自动解码为 stroutputsubprocess.check_output([echo,Hello World!],textTrue)print(output)# 输出: Hello World!核心特性自动检查错误(check)函数名中的check意味着它会自动检查命令的退出状态码(returncode)。如果命令执行失败(比如命令拼错、文件不存在)它会抛出subprocess.CalledProcessError异常。importsubprocesstry:# 尝试查看一个不存在的文件outputsubprocess.check_output([ls,not_exist.txt],textTrue)exceptsubprocess.CalledProcessErrorase:print(f命令执行失败)print(f返回码:{e.returncode})print(f原本的命令:{e.cmd})处理标准错误 (stderr)默认情况下check_output只返回标准输出(stdout)。如果命令产生了错误信息(stderr),这些错误信息会直接打印到屏幕上而不会被包含在返回的变量中。如果你相把错误信息也一并合并到输出结果中可以使用stderrsubprocess.STDOUTimportsubprocess# 将 stderr 合并到 stdout 中一起返回outputsubprocess.check_output([ls,not_exist.txt],stderrsubprocess.STDOUT,textTrue)实战1importsubprocess# 1. 定义执行单条 SQL 的函数defrun_query(cmd):# 使用 check_output如果 SQL 报错会自动抛出 CalledProcessErrortry:outputsubprocess.check_output(cmd,universal_newlinesTrue)returnoutput.strip()exceptsubprocess.CalledProcessErrorase:print(fError executing Hive query:{e.output})sys.exit(1)# 主方法defmain():#table test.table_test#day 2026-01-01# 待查询的语句queryfSELECT count(1) FROM{table}WHERE day {day}queue_nameroot.queue.xacmd[spark3-sql,--queue,queue_name,-e,query]# 执行查询query_resultrun_query(cmd)print(query_result)if__name____main__:main()实战2importsubprocessimportconcurrent.futures# 1. 定义执行单条 SQL 的函数defrun_query(query,queue_nameroot.queue.xa):cmd[spark3-sql,--queue,queue_name,-e,query]# 使用 check_output如果 SQL 报错会自动抛出 CalledProcessErrortry:outputsubprocess.check_output(cmd,universal_newlinesTrue)returnoutput.strip()exceptsubprocess.CalledProcessErrorase:print(fError executing spark-sql query:{e.output})sys.exit(1)# 2. 定义并发执行多条 SQL 的主函数defrun_queries_concurrent(queries_dict,max_workers3):results{}# 使用 ThreadPoolExecutor 进行并发withconcurrent.futures.ThreadPoolExecutor(max_workersmax_workers)asexecutor:# 提交所有任务future_to_query{executor.submit(run_query,sql):keyforkey,sqlinqueries_dict.items()}# 获取结果 (as_completed 会在任务完成时立刻产出)forfutureinconcurrent.futures.as_completed(future_to_query):keyfuture_to_query[future]try:# 设置超时时间例如 3600 秒防止任务永久卡死results[key]future.result(timeout3600)print(f任务 [{key}] 执行成功)exceptExceptionase:print(f任务 [{key}] 发生未知错误:{e})returnresults# 主方法defmain():# 准备你的 SQL 字典my_queries{task_1:fSELECT count(1) FROM test.table_test where day 2026-06-01 ,task_2:fSELECT count(1) FROM test.table_test where day 2026-06-02 ,task_3:fSELECT count(1) FROM test.table_test where day 2026-06-03 }print(开始并发执行 Spark SQL 任务...)# 执行并发任务 (最多同时跑 3 个)final_resultsrun_queries_concurrent(my_queries,max_workers3)print(-*30)print(f 所有任务执行完毕总耗时:{end_time-start_time:.2f}秒)task_1_countint(final_results[task_1].strip())task_2_countint(final_results[task_2].strip().split(\t)[0])task_3_countint(final_results[task_3].strip().split(\t)[0])# 打印结果print(ftask_1_count:{task_1_count})print(ftask_2_count:{task_2_count})print(ftask_3_count:{task_3_count})if__name____main__:main()

相关新闻

【Git命令操作代码管理】

【Git命令操作代码管理】

– git 提交代码命令 1. 查看状态 git status 2. 添加所有更改 git add . 3. 提交到本地 git commit -m “完成首页UI开发” 4. 拉取远程最新代码(防止冲突) git pull origin main 5. 推送到远程 git push origin main –假设你要将远程的 main 分支合并…

2026/7/24 20:16:34阅读更多 →
3个核心技巧+5个实战场景:Reloaded-II游戏模组管理框架深度使用指南

3个核心技巧+5个实战场景:Reloaded-II游戏模组管理框架深度使用指南

3个核心技巧5个实战场景:Reloaded-II游戏模组管理框架深度使用指南 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 还在为游戏模组安…

2026/7/24 20:16:34阅读更多 →
后端大厂面试总结大全四

后端大厂面试总结大全四

目录:1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化3、除了使用try...catch来抛异常还有其他的方法吗?4、Feign 第一次调用为什么会很慢?5、如何保证数据库和缓存强一致性?5.1 整体流程5.2 先选一个基础模式&…

2026/7/24 20:16:34阅读更多 →
AMD Ryzen处理器深度调试指南:SMUDebugTool开源工具完全解析

AMD Ryzen处理器深度调试指南:SMUDebugTool开源工具完全解析

AMD Ryzen处理器深度调试指南:SMUDebugTool开源工具完全解析 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…

2026/7/24 21:48:50阅读更多 →
【独家】Gartner未公开的AI邮件营销成熟度模型:3类企业正加速淘汰传统EDM团队

【独家】Gartner未公开的AI邮件营销成熟度模型:3类企业正加速淘汰传统EDM团队

更多请点击: https://intelliparadigm.com 第一章:AI自动化邮件营销的范式革命 传统邮件营销长期受限于静态用户分群、固定模板与滞后反馈机制,而AI驱动的自动化系统正从根本上重构其技术逻辑与商业价值链条。大语言模型(LLM&…

2026/7/24 21:48:50阅读更多 →
MySQL 分库分表——ShardingSphere 实战

MySQL 分库分表——ShardingSphere 实战

单表数据量达到千万级时,分库分表是最终方案。ShardingSphere 是目前最主流的中间件。 一、什么时候需要分库分表 单表 > 1000万行 → 索引深度增加,B树变高 单库 QPS > 5000 → 连接池不够 单库 > 500GB → 备份和恢复时间长分库分表也要付…

2026/7/24 21:48:50阅读更多 →
Claude Code UI提示词工程|全网独家复现分层规范与反AI滥俗模板,助力商用级高辨识度界面、多风格前端页面、标准化设计系统高效落地

Claude Code UI提示词工程|全网独家复现分层规范与反AI滥俗模板,助力商用级高辨识度界面、多风格前端页面、标准化设计系统高效落地

目录 一、前言:破解AI界面同质化痛点,告别流水线滥俗设计 二、核心原理:Claude Code UI生成的底层逻辑与优化思路 三、四大核心UI提示词工程体系(根治AI滥俗模板) 3.1 分层维度精准约束:拒绝笼统模糊需求 3.2 标杆风格参考替代抽象描述 3.3 反向禁用约束:从根源阻…

2026/7/24 21:48:50阅读更多 →
MySQL 事务与隔离级别——MVCC、行锁、间隙锁

MySQL 事务与隔离级别——MVCC、行锁、间隙锁

事务和锁是 MySQL 面试中最核心的部分。隔离级别、MVCC 原理、行锁间隙锁是高频考点。 一、四大隔离级别 -- READ UNCOMMITTED(读未提交) -- 脏读:读到另一个事务未提交的数据 -- 不可重复读:同一事务中两次读到不同数据 -- …

2026/7/24 21:48:50阅读更多 →
AI获客+自动成交+客户留存全闭环,创业者私藏的9件套工具清单,仅开放72小时下载!

AI获客+自动成交+客户留存全闭环,创业者私藏的9件套工具清单,仅开放72小时下载!

更多请点击: https://intelliparadigm.com 第一章:AI获客自动成交客户留存全闭环方法论 在数字化营销纵深演进的当下,单一工具或孤立环节已无法支撑可持续增长。真正的增长引擎,是将获客、转化与留存嵌入统一智能体中&#xff0c…

2026/7/24 21:46:49阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →