当前位置: 首页 > 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.rkmt.cn/news/1458112.html

相关文章:

  • Vectorizer:3分钟快速掌握图片无损放大终极方案 [特殊字符]
  • C++开发避坑:一个#pragma pack(1)如何解决0xC0000005访问冲突(附memcpy_s常见错误排查)
  • TinyLlama-1.1B-Chat-v0.6与HuggingFace生态集成指南
  • 专业级Adobe破解工具实战指南:Adobe-GenP 3.0深度解析与使用教程
  • STM32F407用定时器编码器模式实时读取步进电机转速与方向(HAL库工程源码)
  • 物联项目实战:基于STM32F4探索者开发板的智能环境监测站(DHT11+OLED+ESP8266)
  • 告别Excel报表!用JimuReport积木报表10分钟搞定一个炫酷数据大屏(附免费模板)
  • 告别阻塞延时!在FreeRTOS里优雅地采集ADS1115数据(STM32+CubeMX配置)
  • STM32 Bootloader跳转App总进HardFault?一个PSP/MSP堆栈模式切换的坑
  • GPT-5.5 Pro实战指南:工程上下文建模与知识工作自动化
  • 避坑指南:NBIOT设备接入OneNET时,为什么你的AT+MIPL指令总报错?从IMEI获取到数据上传的全流程排错
  • 不止S参数:用HFSS电压/电流源激励,给你的PCB电源完整性仿真开个挂
  • MATLAB车牌识别GUI工具:33张实拍图+定位识别一体化操作
  • 5分钟搭建专业级AI投资团队:多智能体股票分析框架实战指南
  • Mac Mouse Fix:让你的普通鼠标在macOS上拥有超越触控板的体验
  • 对抗训练中的灾难性过拟合现象与LAP解决方案
  • 用Python手把手教你搞定Gluon-6L3机械臂的正逆解(附完整代码与避坑指南)
  • 扣子工作流实战:多节点串联打造 AI 内容自动化流水线
  • STM32驱动TM1616数码管避坑指南:从原理图分析到SPI模拟时序调试
  • SX1262 LoRa模块功耗优化实战:从Standby模式到CAD侦听的省电配置全解析
  • 告别格式限制:QMCFLAC2MP3 让你真正拥有音乐自由
  • CPU上卷积神经网络能效优化与算法选择
  • 0基础学挖漏洞,从入门到实战,这一篇保姆级教程就够了!
  • 告别Arduino IDE默认支持:手把手教你为冷门芯片ATmega168P烧录Bootloader(附USBasp实战)
  • LLM代理系统安全威胁:隐式毒性攻击与防御策略
  • Gemma 4本地Agent落地指南:从能跑到能用的四层确定性设计
  • 日语重排序模型对比分析:为什么选择japanese-reranker-cross-encoder-small-v1
  • 业务落地AI的三道硬门槛:数据、流程与权责
  • 从“亚太2R”到“星链”:卫星天线调星原理简史与家用卫星网络入门指南
  • ABB机器人PC SDK避坑指南:从Visual Studio 2019环境配置到成功建立TCP/IP连接的全记录