我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python2有os.system,
>>> os.system(‘uname -a‘) Darwin Alexs-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Sun Jun 4 21:43:07 PDT 2017; root:xnu-3248.70.3~1/RELEASE_X86_64 x86_64 0 #执行状态
这条命令的实现原理是什么呢?(视频中讲,解释进程间通信的问题...)
除了os.system可以调用系统命令,,commands,popen2等也可以,比较乱,于是官方推出了subprocess,目地是提供统一的模块来实现对系统命令或脚本的调用
subprocess 模块允许生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。 该模块旨在替换几个较旧的模块和功能:
- os.system
- os.spawn*
三种执行命令的方法
- subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐
subprocess.run([‘df‘,‘-h‘,‘|‘,‘grep‘,‘disk1‘],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True) #run(列表,标准错误,标准输出) #执行列表中的命令,如果命令顺利执行,通过PIPE管道输出给stdout,如果出错了,就把错误原因通过PIPE管道输出给stderr,这里的PIPE管道是操作系统 subprocess.run(‘df -h|grep disk1‘,shell=True) #shell=True的意思是这条命令直接交给系统去执行,不需要python负责解析
- subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法
- subprocess.Popen() #上面各种方法的底层封装
原文地址:https://www.cnblogs.com/Moxiaoyu666/p/10543789.html
时间: 2024-10-08 13:06:36