Python全栈之路----常用模块----subprocess模块

Posted 沫小妤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈之路----常用模块----subprocess模块相关的知识,希望对你有一定的参考价值。

       我们经常需要通过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() #上面各种方法的底层封装

以上是关于Python全栈之路----常用模块----subprocess模块的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路----常用模块----subprocess模块

Python全栈之路----常用模块----logging模块

Python全栈之路----常用模块----包及跨模块导入

10python全栈之路-面向对象进阶

python全栈开发之路

18.python全栈之路:模块