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怎么学好python?
Oct 07 Python
python分析apache访问日志脚本分享
Feb 26 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python入门_浅谈for循环、while循环
May 16 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Python代码缩进和测试模块示例详解
May 07 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
Python中if有多个条件处理方法
Feb 26 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 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 编程安全性小结
2010/01/08 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
python3 读写文件换行符的方法
2018/04/09 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
Python检查ping终端的方法
2019/01/26 Python
python动态进度条的实现代码
2019/07/03 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
python 实现线程之间的通信示例
2020/02/14 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
QQ空间主人寄语大全
2014/04/12 职场文书
展览会邀请函
2015/02/02 职场文书
Python 内置函数速查表一览
2021/06/02 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS
CentOS安装Nginx并部署vue
2022/04/12 Servers
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers