python subprocess库

news2025/2/21 11:03:48

subprocess

subprocess 是 Python 标准库中的一个模块,用于创建和管理子进程。它允许你在 Python 程序中执行外部命令、调用其他程序,并与这些程序进行交互。subprocess 模块提供了丰富的功能,可以替代一些旧的模块和函数,如 os.system()、os.spawn*()、os.popen() 等。

主要功能

* 执行外部命令:subprocess 可以启动一个新的进程来执行外部命令。
* 与子进程交互:你可以通过 subprocess 与子进程的标准输入、输出和错误流进行交互。
* 获取命令的输出:你可以捕获子进程的输出,并在 Python 程序中使用。
* 控制子进程:你可以等待子进程完成、检查其返回码,甚至终止子进程。

常见函数

  1. subprocess.run():
    这是subprocess模块中最常用的函数之一。它用于运行一个命令,并等待其完成,返回一个CompletedProcess对象,包含命令的执行结果。
  • 核心参数
    • args(必需参数)
      类型:str 或 序列(如 list)
      作用:指定要执行的命令
    • shell
      类型:bool
      默认:Flase
      作用:是否通过系统shell执行命令
      注意:
      • Ture时可直接使用管道符等特性
      • 存在安全风险(避免拼接用户输入)
subprocess.run(["ls",  "-l"])      # 推荐方式(安全)
subprocess.run("ls  -l", shell=True) # 字符串形式需配合 shell=True
  • 输入输出流控制
    • stdout/stdin/stdeer
      类型:文件描述符或subprocess.PIPE/DEVNULL
      特殊值:
      • subprocess.PIPE # 捕获输出
      • subprocess.DEVNULL # 丢弃输出
      • subprocess.STDOUT # 将 stderr 合并到 stdout
    • capture_output
      类型:bool
      默认:Flase
      简写:stdout=subprocess.PIPE, stderr=subprocess.PIPE
      * capture_output=True 等效于同时设置
      stdout=subprocess.PIPE
      stderr=subprocess.PIPE
    • text/universal_newlines
      类型:bool
      默认: Flase
      作用:是否以字符串形式返回输出(默认返回字节)
  • 执行控制
    • check
      类型:bool
      默认:Flase
      作用:当返回码非零时抛出CalledProcessError
    • timeout
      类型:int/float
      作用:设置命令超时时间(秒)
      异常:触发TimeoutExpired
    • input
      类型:bytes/str
      作用:向子进程的标准输入发送数据
      要求:需配合stdin=subprocess.PIEP
  • 环境控制
    • cwd
      类型:str/Path
      作用:设置命令执行工作目录
      示例:subprocess.run(["git", "status"], cwd="/project/path")
    • env
      类型:dict
      作用:自定义环境变量
      注意:默认继承当前环境,建议使用os.environ.copy()
  1. subprocess.Popen():
  • 核心定位
    • 这是一个更底层的接口,提供了更多的灵活性。你可以使用它来启动一个子进程,并与其进行复杂的交互。subprocess.Popen 是 Python 子进程管理的底层接口,相比 subprocess.run() 提供更细粒度的控制,适用于以下场景:
      • 实时流处理(如逐行读取日志)
      • 交互式命令(如自动化 SSH 会话)
      • 后台进程管理(如启动守护进程)
      • 复杂 I/O 管道(如多进程协作)
  1. subprocess.call():
  • 功能概述
    作用:执行命令并等待其完成,返回命令的 退出状态码(0 表示成功,非 0 表示失败)13。
    典型场景:简单执行命令且不关心输出内容,只需判断是否成功。
    核心参数
    • 核心参数
      • args
        类型/默认值:str 或 list
        说明:要执行的命令(推荐列表形式)示例:call(["ls", "-l"]) 或 call("ls -l", shell=True)
      • shell
        类型/默认值:bool (False)
        说明:是否通过系统 shell 执行(支持管道符等特性,但有安全风险)
      • stdout
        类型/默认值:文件描述符
        说明:控制标准输出(默认输出到终端,可用 subprocess.DEVNULL 丢弃输出)
      • stderr
        类型/默认值:文件描述符
        说明:控制标准错误(默认输出到终端)
import subprocess 
 
# 执行命令并检查状态码 
return_code = subprocess.call(["gcc",  "main.c"])
if return_code == 0:
    print("编译成功")
else:
    print("编译失败,错误码:", return_code)
  1. subprocess.check_output():
    • 功能概述
      作用:执行命令并 捕获标准输出内容(不捕获错误输出),若命令失败则抛出 CalledProcessError 异常
      典型场景:需要获取命令输出内容,且要求命令必须成功执行。
    • 核心参数
      • args
        类型/默认值:str 或 list
        说明:同 call()
      • shell
        类型/默认值:bool (False)
        说明:同 call()
      • stdeer
        类型/默认值:文件描述符
        说明:默认错误输出到终端,可设为 subprocess.STDOUT 合并到 stdout
      • universal_newlines
        类型/默认值:bool (False)
        说明:返回字符串形式
      • encoding
        类型:str
        说明:指定输出编码(需配合 text=True 使用)
import subprocess 
 
try:
    output = subprocess.check_output( 
        ["python", "script.py"], 
        stderr=subprocess.STDOUT,  # 合并错误到输出 
        text=True                  # 返回字符串而非字节 
    )
    print("输出结果:", output)
except subprocess.CalledProcessError as e:
    print("执行失败,错误信息:", e.output) 

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

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

相关文章

矿用机车移动逆变电源设计(论文+源码)

1总体方案设计 本课题为矿用机车移动逆变电源的硬件电路设计,其整个架构如图2.1所示包括了:380V三相交流电,逆变电路,高频变压器,24V直流输出,控制电路,驱动电路,保护电路等等。 在工作原理上&…

前七章综合练习

一,拓扑图 二,实验要求 不限 三,实验步骤 第一步,搭建拓扑图 如上 注意: 第二步,配置IP trust: client1 client2 fw untrusrt-1: fw r3 电信DNS 百度web-1 untrust-2&#xf…

环境变量2

目录 环境变量PATH 如何改变PATH 我们今天继续来学习环境变量2!!! 环境变量PATH PATH的作用是知道命令的搜索路径,我们都知道Linux上的命令行指令,ll,pwd什么的为什么我们写出来系统就知道是什么并且运…

数据录入与处理岗位

随着人工智能技术的迅猛发展,DeepSeek等先进AI系统正在逐步渗透到各个行业,工控行业也不例外。工控行业作为工业自动化的核心领域,涵盖了从生产线控制到设备维护的多个环节。然而,随着AI技术的不断进步,一些传统岗位正…

基于ffmpeg+openGL ES实现的视频编辑工具(一)

在深入钻研音视频编辑开发这片技术海洋时,相信不少开发者都和我有同样的感受:网络上关于音视频编辑工具实现的资料繁多,理论阐释细致入微,代码片段也随处可见。然而,一个显著的缺憾是,缺乏一个完整成型的 A…

LLM 推理中推理-时间计算技巧

25年2月来自香港科技大学广州分校的论文“Bag of Tricks for Inference-time Computation of LLM Reasoning”。 随着大语言模型 (LLM) 的进步,解决复杂的推理任务越来越受到关注。推理-时间计算方法(例如 Best-of-N、波束搜索等)特别有价值…

matplotlib 如何是的横坐标纵向显示

在 ​​matplotlib​​​ 中,若要让横坐标标签纵向显示,可以使用 ​​plt.xticks()​​​ 或 ​​ax.set_xticklabels()​​ 方法结合旋转参数来实现。 方法一:使用 ​​plt.xticks()​​ 当你使用 ​​matplotlib​​​ 的 pyplot 接口&am…

Mobaxterm: Local port forwarding Remote port forwarding

文章目录 Remote port forwardingLocal port forwardingAppendix: Deploy clash in docker Remote port forwarding If you want to share the proxy on your local machine with the remote server, use Remote port forwarding. Consider this scenario: There is no proxy…

DeepSeek模型快速部署教程-搭建自己的DeepSeek

前言:在人工智能技术飞速发展的今天,深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型,凭借其高效的性能和灵活的部署方式,受到了广泛关注。无论是自然语言处理、图像识别,还是…

用友U8 固定资产-批量变动单

前提:没有结账,没有结账,没有结账 如果已经结账,可反结账 1.需要先计提折旧,操作路径是点击【固定资产】-【计提折旧】-计提本月折旧 2.进行资产减少操作,点击【资产处置】-【资产减少】,如…

基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频

本系统包含用户、管理员两个角色。 用户角色:注册登录、查看首页电影信息推荐、查看电影详情并进行收藏预定、查看电影资讯、在线客服、管理个人订单等。 管理员角色:登录后台、管理电影类型、管理放映厅信息、管理电影信息、管理用户信息、管理订单等。…

自然语言处理NLP 02统计语言模型

目录 jieba中文分词 TF-IDF TF(词频,Term Frequency) IDF(逆文档频率,Inverse Document Frequency) 总结 案例:从文本数据中提取并分析关键词的重要性 jieba中文分词 jieba 是一个强大的…

Qt开发④Qt常用控件_上_QWdget属性+按钮类控件

目录 1. 控件概述和发展 2. QWidget 核心属性 2.1 核心属性概览 2.2 enabled 是否可用 2.3 geometry 位置尺寸 2.4 windowTitle 标题 2.5 windowIcon 图标 2.6 windowOpacity 不透明度 2.7 cursor 光标 2.8 font 字体 2.9 toolTip 鼠标悬停提示 2.10 focusPolicy 焦…

Apache Struts RCE (CVE-2024-53677)

前言 对目前的Apache Struts RCE (CVE-2024-53677)的poc进行总结,由于只能单个ip验证,所以自己更改一下代码,实现:多线程读取url验证并保存,更改为中文解释 免责声明 请勿利用文章内的相关技术从事非法测试&#xf…

23. AI-大语言模型-DeepSeek

文章目录 前言一、DeepSeek是什么1. 简介2. 产品版本3. 特征4. 地址链接5. 三种访问方式1. 网页端和APP2. DeepSeek API 二、DeepSeek可以做什么1. 应用场景2. 文本生成1. 文本创作2. 摘要与改写3. 结构化生成 3. 自然语言理解与分析1. 语义分析2. 文本分类3. 知识推理 4. 编程…

成人床垫更新关于 SOR/2016-183 和《纺织品贴标和广告法规》的合规

成人床垫更新关于 SOR/2016-183 和《纺织品贴标和广告法规》的合规性声明 加拿大站成人床垫法规SOR/2016-183是强制性的 。为确保买家安全并遵守相关法规,亚马逊要求所有在加拿大销售的成人床垫必须符合《床垫法规》规定的安全标准,包括SOR/2016-183。此…

11.编写前端内容|vscode链接Linux|html|css|js(C++)

vscode链接服务器 安装VScode插件 Chinese (Simplified) (简体中⽂) Language Pack for Visual Studio CodeOpen in BrowserRemote SSH 在命令行输入 remote-ssh接着输入 打开配置文件,已经配置好主机 点击远程资源管理器可以找到 右键链接 输入密码 …

网工项目实践2.6 广域网需求分析及方案制定

本专栏持续更新,整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 全网拓扑展示 一.广域网互联方式 1.专线 优点 稳定 独享。绝对安全。可靠性高,带宽高,完全取决于终端接口。 缺点: 费用高。建设时间长。难…

大模型相关学习

知识科普 为什么不直接使用网页版 DeepSeek? 我们的需求:绝对的隐私保护和个性化知识库构建。场景:若希望大模型能根据企业规章制度来回答问题,一般需上传企业规章制度的附件,但仍可能面临问题。 数据隐私问题:联网使…

基于Java(JSP)+MySQL设计与实现的 MVC 鲜花订购系统

基于MVC的鲜花订购系统的设计与实现 摘 要 摘 要:鲜花订购系统与网络相结合,给用户提供更加周到和人性化的服务。网站模式为MVC模式,基于MySql数据库,采用Jsp,Session绘画跟踪、JavaScript等技术,实现了普通用户可以浏览、查看鲜…