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 相关文章推荐
在Django中进行用户注册和邮箱验证的方法
May 09 Python
python 异常处理总结
Oct 18 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Django的信号机制详解
May 05 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
python实现远程控制电脑
May 23 Python
python递归下载文件夹下所有文件
Aug 31 Python
使用python切片实现二维数组复制示例
Nov 26 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
公务员政审个人总结
2015/02/12 职场文书
复试通知单模板
2015/04/24 职场文书
MySQL数据库 任意ip连接方法
2022/05/20 MySQL