当前位置: 首页 > news >正文

python调用其它程序 os.system os.subprocess

subprocess.Popen是 Python 里启动一个外部进程的工具

https://www.byhy.net/py/lang/extra/callother/

subprocess.Popen是 Python 里启动一个外部进程的工具,让 Python 去执行一个系统命令或启动一个程序

subprocess.Popen(args)里面的args你想启动的命令,它可以有几种写法,但最推荐写成列表形式

python | subprocess.Popen 使用详解 | 犀牛的博客https://benpaodewoniu.github.io/2022/04/05/python155/

shell=False + 字符串,Linux / POSIX,不会启动 shell,会把整个字符串当成要执行的程序名,windows下会把字符串解析成可执行程序和参数

shell=False + 列表,不经过shell,直接启动可执行程序

shell=True + 字符串,就是明确要求通过 shell 执行

shell=True + 列表,仍然会经过 shell,shell=True + 列表时,列表最好只有一个完整命令字符串

普通程序,shell=False+列表

需要shell语法,需要shell解释,shell=True+字符串

列表形式很像 exec form,推荐使用;字符串形式只有在shell=True时,才是 shell 解释。

列表形式里,第一个元素就是要启动的程序,第一个元素必须是系统能找到的可执行程序

列表形式,直接执行程序。列表形式里,第一个元素就是要启动的程序,第一个元素必须是系统能找到的可执行程序

字符串 +shell=True,交给 shell 执行

shell =True,PIPE

shell =True 打开一个命令行解释器,让命令行解释器执行命令。即linux上是shell,windows是cmd。

shell=False + 字符串,Linux / POSIX,不会启动 shell,会把整个字符串当成要执行的程序名,windows下会把字符串解析成可执行程序和参数

shell=True + 字符串,就是明确要求通过 shell 执行

shell=False + 列表,不经过shell,直接启动可执行程序

shell=True + 列表,仍然会经过 shell,shell=True + 列表时,列表最好只有一个完整命令字符串

shell=True + 列表时,列表最好只有一个完整命令字符串

# PIPE运行命令后命令的输出不要输出的终端上了,而是输出到管道里,然后我们的程序在从管道里读出来。

stdin ,stdout ,stderr

程序默认都有3 个标准流,可以理解成程序和外界交流的 3 个通道

0 stdin 标准输入 程序从这里读数据
1 stdout 标准输出 程序把正常结果写到这里
2 stderr 标准错误 程序把错误信息写到这里

stdin stdout和stderr,分别表示程序的标准输入、标准输出和标准错误。可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。如果是PIPE,则表示需要创建一个新的管道,如果是None,不会做任何重定向工作,子进程的文件描述符会继承父进程的。另外,stderr的值还可以是STDOUT,表示子进程的标准错误也输出到标准输出。

stdinstdoutstderr是用来控制子进程“从哪里读输入、把正常输出写到哪里、把错误输出写到哪里”的。

不设置stdout/stderr,子进程输出直接显示在当前窗口(子进程的输出默认继承父进程);设置成subprocess.PIPE,Python 就会把输出接回来,你可以通过communicate()read()读取

子进程不是“把消息输入到p.stdout里”,而是把正常输出写到自己的stdout通道,把错误输出写到自己的stderr通道。
Python 用PIPE把这两个通道接回来,于是父进程这边就可以通过p.stdoutp.stderr读取。

可以画成这样:

子进程正常输出 stdout ---> 管道 ---> 父进程 p.stdout 子进程错误输出 stderr ---> 管道 ---> 父进程 p.stderr

cwd:让子进程在指定目录下运行。

cwd只是影响子进程,不会改变当前 Python 主程序所在目录

executable参数:

executable 很少用,主要是在 shell=True 时指定“用哪个 shell 来解释命令”

指定要执行的程序。它很少会被用到:一般程序可以由args 参数指定。如果shell=True ,executable 可以用于指定用哪个shell来执行(比如bash、csh、zsh等)。*nix下,默认是 /bin/sh ,windows下,就是环境变量 COMSPEC 的值(一般是cmd)。windows下,只有当你要执行的命令确实是shell内建命令(比如dir ,copy 等)时,你才需要指定shell=True

示例

python | subprocess.Popen 使用详解 | 犀牛的博客

http://www.jsqmd.com/news/946610/

相关文章:

  • Atlas OS Xbox登录错误0x89235107终极解决方案:从快速修复到深度优化
  • Vectorizer:3分钟快速掌握图片无损放大终极方案 [特殊字符]
  • 基于Xilinx Artix-7的MATLAB建模+Verilog实现图像处理全流程工程包(含仿真、板级验证与毕设答辩资料)
  • 小米红米手机原生运行Gemma-4V多模态模型实战指南
  • C++开发避坑:一个#pragma pack(1)如何解决0xC0000005访问冲突(附memcpy_s常见错误排查)
  • Qwen3.5-27B推理蒸馏模型性能大揭秘:96.91% HumanEval通过率的背后
  • DTSFormer模型在机场客流预测中的应用与优化
  • Claude Opus 4.7工程落地指南:从任务闭环到人机协作SOP
  • TinyLlama-1.1B-Chat-v0.6与HuggingFace生态集成指南
  • 破解Dify工作流复杂配置难题:基于Awesome-Dify-Workflow的高效解决方案
  • 白帽私藏!7 款免费网络监控工具全攻略
  • Opauth策略开发指南:如何自定义认证提供商扩展
  • 图像去噪/超分算法效果怎么评?手把手教你用MATLAB定制PSNR和SSIM评估脚本
  • 用STM32F103的DAC做个简易信号发生器:从配置到波形输出(标准库版)
  • 完全免费!LX Music桌面版:5分钟掌握开源跨平台音乐播放器终极指南
  • 专业级Adobe破解工具实战指南:Adobe-GenP 3.0深度解析与使用教程
  • DC NXT物理综合避坑指南:NDM库、TLUPlus文件与Floorplan加载那些事儿
  • 2026年靠谱的气柱袋批发/温州气柱袋卷材/气柱袋包装材料/温州气柱袋用户口碑推荐厂家 - 品牌宣传支持者
  • gpt-4o生产稳定性解析:从API容错到接口契约的工程跃迁
  • PaddleOCR最新版(v4)从安装到训练:手把手教你打造自己的仪表盘数字识别模型
  • 蓝桥杯单片机竞赛实战包:STC15开发板模块代码+十一届起真题工程源码
  • LangChain+LangGraph 智能 Agent 核心逻辑
  • 2026年评价高的VOCs压缩机/浙江油气压缩机主流厂家对比评测 - 品牌宣传支持者
  • BitCPM4-CANN-0.5B-unquantized:华为昇腾NPU专用大语言模型量化感知训练完整指南
  • 5分钟上手:本地AI知识库搭建全攻略
  • 2026实测:这5个英文降AI率技巧,免费指南手慢无(附工具测评)
  • STM32F407用定时器编码器模式实时读取步进电机转速与方向(HAL库工程源码)
  • 物联项目实战:基于STM32F4探索者开发板的智能环境监测站(DHT11+OLED+ESP8266)
  • SpringBoot+Vue大学校园篮球赛事管理系统源码+论文
  • AI内容生产底层逻辑:8个结构化指令提升完播率与真人感