Python Subprocess模块原理及实例

作者:JasonMingHao 时间:2022-09-29 04:37:20 

前言

其实有一个模块也支持执行系统命令,那个模块就是sys.system,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要耗费一个小时,那么主进程会卡一个小时,而不会去干别的事,这样就会导致程序的运行效率低下。

如果由subprocess去执行系统命令的时候并不会让主进程去执行,而是主进程会开辟出一个子进程去执行,并不会影响到主进程的运行,主进程该干嘛就干嘛,那么又有个问题,大家都知道进程之间的内存空间是独立的,也就是说进程之间是不能相互访问的,那么在subprocess中,有个管道的概念,既然固定死了进程之间不能相互访问,那么可以将执行命令的结果输出到管道里,该管道其实就是一块共享的内存空间,可以让主进程去获取到该共享内存空间存放的数据

subprocess基本工作原理

Python Subprocess模块原理及实例

subprocess简单案例


import subprocess
# 创建一个子进程去执行系统命令
obj=subprocess.Popen(
 'ps -ef',    # 执行的系统命令(必须是字符串格式)
 shell=True,   # 指定命令解释器来解释执行的这条命令
 stdout=subprocess.PIPE, # 将执行的正确结果丢到管道(共享内存空间,用于进程之间共享)
 stderr=subprocess.PIPE # 将执行的错误结果丢到另一个新的管道
)

'''
当从任意一个管道,例如正确或者错误结果管道中获取值,
'''

# 从正确管道中获取值
res=obj.stdout.read() # 主进程去管道里获取正确的结果
print(res.decode('utf-8')) # 获取的结果是bytes类型,需要指定decode指定编码

# 从错误管道中获取值
res2=obj.stderr.read()
print(res2.decode('utf-8'))

来源:https://blog.51cto.com/12643266/2409721

标签:python,subprocess,模块
0
投稿

猜你喜欢

  • 关于python如何生成exe文件

    2021-06-05 00:52:33
  • Python用 KNN 进行验证码识别的实现方法

    2021-03-29 06:58:08
  • Python中__init__和__new__的区别详解

    2023-09-24 13:14:17
  • python difflib模块示例讲解

    2022-01-21 04:35:57
  • python退出循环的方法

    2022-06-10 07:24:35
  • SqlServer 2005 T-SQL Query 学习笔记(2)

    2024-01-20 20:21:51
  • 2011年网页设计发展趋势

    2011-01-10 20:45:00
  • js获取css的各种样式并且设置他们的方法

    2024-04-18 10:10:33
  • Oracle 查询表信息获取表字段及字段注释

    2024-01-14 14:46:36
  • js日期范围初始化得到前一个月日期的方法

    2023-07-02 04:45:30
  • 实例讲解实现SQL下的字符串拆分具体方法

    2008-12-09 14:55:00
  • Git操作规范之tag的使用技巧详解

    2022-07-30 05:10:54
  • python上下文管理的使用场景实例讲解

    2022-01-31 08:38:33
  • SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭

    2024-01-16 18:38:28
  • 快速升级MySQL系统表

    2009-01-23 12:35:00
  • FCKeditor技巧之在按钮旁边加文字

    2007-10-10 13:17:00
  • Python 虚拟机字典dict内存优化方法解析

    2022-03-04 08:20:56
  • 常用的数据库访问方式是什么?

    2009-11-01 15:08:00
  • 解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码

    2011-06-06 10:29:00
  • python模拟预测一下新型冠状病毒肺炎的数据

    2023-12-17 05:09:15
  • asp之家 网络编程 m.aspxhome.com