博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之Subprocess模块
阅读量:6619 次
发布时间:2019-06-25

本文共 852 字,大约阅读时间需要 2 分钟。

前言

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

转载于:https://blog.51cto.com/12643266/2409721

你可能感兴趣的文章
基于Centos7.2的DNS服务器搭建
查看>>
Sass--混合指令 (Mixin Directives)
查看>>
学习笔记DL005:线性相关、生成子空间,范数,特殊类型矩阵、向量
查看>>
MySQL同表更新与查询冲突
查看>>
Java编程思想(static关键字)
查看>>
北京云栖大会 Tech Insight 金融级分布式架构分享一览
查看>>
交换机的“TRUNK”的配置
查看>>
python下载并处理音频
查看>>
第四章(1)Libgdx项目安装、运行和调试
查看>>
CentOS7.4 Nginx添加系统服务及开机自启动
查看>>
点滴积累【C#】---初始页面自动给站点名称赋值
查看>>
awk之随机函数rand()和srand() (转)
查看>>
数字的格式化,异常处理
查看>>
MySQL中使用连接查询
查看>>
当linux没有多分区时的,swap添加方案
查看>>
[转载]html中DTD使用小结
查看>>
经典排序算法 - 冒泡排序Bubble sort
查看>>
mysql的查询、子查询及连接查询
查看>>
mysql 命令导入导出数据
查看>>
安装Ntop监控网络软件
查看>>