您的位置:首页 > 编程语言 > Python开发

Python之Subprocess模块

2019-06-16 18:07 806 查看

前言
其实有一个模块也支持执行系统命令,那个模块就是

sys.system
,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要耗费一个小时,那么
主进程会
卡一个小时,而不会去干别的事,这样就会导致程序的运行效率低下。

如果由

subprocess
执行系统命令
的时候并不会让主进程去执行,而是主进程会开辟出一个
子进程
去执行,并不会影响到
主进程
的运行,
主进程
该干嘛就干嘛,那么又有个问题,大家都知道进程之间的
内存空间是独立
的,也就是说
进程之间
是不能
相互访问
的,那么在
subprocess
中,有个管道的概念,既然固定死了
进程之间不能相互访问
,那么可以将执行命令的结果输出到管道里,该管道其实就是一块
共享的内存空间
,可以让
主进程
获取到该共享内存空间存放的数据

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'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: