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函数嵌套实例
Sep 23 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
python中get和post有什么区别
Jun 19 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
如何用用Python将地址标记在地图上
Feb 07 Python
用Python远程登陆服务器的步骤
Apr 16 Python
用Python简陋模拟n阶魔方
Apr 17 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.ini中date.timezone设置分析
2011/07/29 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python列表与元组详解实例
2013/11/01 Python
python处理cookie详解
2014/02/07 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
Django实现快速分页的方法实例
2017/10/22 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
Flask-WTF表单的使用方法
2019/07/12 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python如何转换字符串大小写
2020/06/04 Python
详细分析Python垃圾回收机制
2020/07/01 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
机关节能减排实施方案
2014/03/17 职场文书
仓库规划计划书
2014/04/28 职场文书
仓管员岗位职责
2015/02/03 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android