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+pyqt实现12306图片验证效果
Oct 25 Python
python绘制多个曲线的折线图
Mar 23 Python
python 解压pkl文件的方法
Oct 25 Python
详解Python字典的操作
Mar 04 Python
Python简单I/O操作示例
Mar 18 Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
python3.9之你应该知道的新特性详解
Apr 29 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 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得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
一段实时更新的时间代码
2006/07/07 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
Vue3为什么这么快
2020/09/23 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
Python常用模块用法分析
2014/09/08 Python
python单例模式实例分析
2015/04/08 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
新年联欢会主持词
2014/03/27 职场文书
公司授权委托书
2014/04/04 职场文书
公司节能减排方案
2014/05/16 职场文书
主持稿开场白
2015/06/01 职场文书
高中家长意见怎么写
2015/06/03 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js