码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-16 19:22:24      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:pipe管道   stderr   tde   出错   pipe   获取   方法   shell   version   

       我们经常需要通过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模块

标签:pipe管道   stderr   tde   出错   pipe   获取   方法   shell   version   

原文地址:https://www.cnblogs.com/Moxiaoyu666/p/10543789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!