Python Subprocess模块原理及实例


Posted in Python onAugust 26, 2019

前言

其实有一个模块也支持执行系统命令,那个模块就是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'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python pass详细介绍及实例代码
Nov 24 Python
详解python 发送邮件实例代码
Dec 22 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
python中使用zip函数出现错误的原因
Sep 28 Python
python lxml中etree的简单应用
May 10 Python
详解Python的循环结构知识点
May 20 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python实现播放和录制声音的功能
Aug 12 Python
Python实现简单的猜单词小游戏
Oct 28 Python
python自动循环定时开关机(非重启)测试
Aug 26 #Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 #Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 #Python
pywinauto自动化操作记事本
Aug 26 #Python
Python 实现的 Google 批量翻译功能
Aug 26 #Python
python自动化工具之pywinauto实例详解
Aug 26 #Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 #Python
You might like
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python实现微信自动回复功能
2018/04/11 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
python性能测试工具locust的使用
2020/12/28 Python
前台接待员岗位职责
2014/01/02 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
中年人生感言
2014/02/04 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
党支部特色活动方案
2014/08/20 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
与死神共舞观后感
2015/06/15 职场文书
app场景下uniapp的扫码记录
2022/07/23 Java/Android