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

python的subprocess 模块

subprocess 模块是 2.4 版本中新增的模块, 它允许您生成新进程,连接到它们的 输入 / 输出 / 错误 管道,并获得它们的返回码 (状态信息), 该模块的目的在于取代几个较旧的模块和功能

subprocess 模块可以用于执行系统命令, 拿到执行的结果, 速度比较的快, 并且它允许你创建一个新的进程让其去执行另外的程序, 并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等

1、简单执行命令拿到结果

import subprocess# shell是开启一个终端,stdout正确结果,stderr错误结果
obj = subprocess.Popen('dir',  # 在终端运行的命令shell=True,  # 新开一个终端stdout=subprocess.PIPE,  # 执行完命令, 将正确输出放到一个管道里stderr=subprocess.PIPE)  # 将错误输出放到一个管道里
# 正确的输出结果
result = obj.stdout.read()  # 拿到的是 bytes 格式的字符,生成的结果需要解码,
result = result.decode('gbk')  # 在windows需要使用gbk编码,linux和mac上是"utf-8"
print(result)# 错误的输出结果
error_res = obj.stderr.read()
error_res = error_res.decode('gbk')
print(error_res)

输出结果:

C:\Users\Anita\AppData\Local\Programs\Python\Python38\python.exe D:\systemdoc\desk\subprocess模块\demo001.py 驱动器 D 中的卷是 新加卷卷的序列号是 48E6-1CBAD:\systemdoc\desk\subprocess模块 的目录2024/06/18  21:50    <DIR>          .
2024/06/18  21:50    <DIR>          ..
2024/06/18  21:28    <DIR>          .idea
2024/06/18  21:50               744 demo001.py1 个文件            744 字节3 个目录 43,191,549,952 可用字节

2、将第一次执行命令拿到的结果进行第二次操作

import subprocessres1 = subprocess.Popen(  # 开启的第一的进程"dir",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)res2 = subprocess.Popen(  # 开启的第二个进程"findstr demo*",     #在dir的结果中查询包含demo*的文件shell=True,stdin=res1.stdout,  # 将第一个进程的正确输出结果拿到做处理stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)result = res2.stdout.read()
result = str(result, encoding="gbk")
print(result)

运行结果:

C:\Users\Anita\AppData\Local\Programs\Python\Python38\python.exe D:\systemdoc\desk\subprocess模块\demo001.py 
2024/06/18  21:56               487 demo001.py

3、直接一条终端命令实现上面的操作

import subprocessres1 = subprocess.Popen("dir | findstr demo*",  # 使用管道符号运行命令shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)result = res1.stdout.read()
result = str(result, encoding="gbk")
print(result)
http://www.lryc.cn/news/375833.html

相关文章:

  • 【Arc gis】使用DEM提取流域范围
  • 大模型技术工程师:抓住时代机遇,成为行业精英_
  • 孟德尔随机化R包:TwoSampleMR和MR-PRESSO安装
  • 6月18日 Qtday4
  • Vue3模拟国足18强赛抽签
  • mesa编译器nir信息储存问题
  • windows下mysql设置开机自启动
  • L2-002 链表去重(C++)
  • 异或运算在面试题中的应用
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 单词大师(100分) - 三语言AC题解(Python/Java/Cpp)
  • LabVIEW在SpaceX的应用
  • 【Android面试八股文】讲一讲String、StringBuffer和StringBuilder在进行字符串操作时候的效率
  • [自动驾驶 SoC]-4 特斯拉FSD
  • PostgreSQL源码分析——物化视图
  • 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)
  • ORA-12560: TNS:协议适配器错误
  • 不容小觑的“白纸黑字”:银行重空凭证的风险与防控
  • 30v-180V降3.3V100mA恒压WT5107
  • Spring Boot 和 Spring Cloud 的区别及选型
  • 【神经网络】图像的数字视角
  • ChatGPT的问题与回复的内容导出(Chorme)
  • 游戏开发中的坑之十四 photoshop的javascript脚本批量修改分辨率
  • leetcode打卡#day45 携带研究材料(第七期模拟笔试)、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯(第八期模拟笔试)
  • Vite+Vue3安装且自动按需引入Element Plus组件库
  • 敬酒词大全绝对实用 万能敬酒词
  • 【Java】已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常
  • Leetcode 76. 最小覆盖子串
  • JAVAWEB--Mybatis03
  • 论文学习_Fuzz4All: Universal Fuzzing with Large Language Models
  • 元数据相关资料整理 metadata