1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python运行命令_Python中执行外部命令

python运行命令_Python中执行外部命令

时间:2022-03-16 08:21:52

相关推荐

python运行命令_Python中执行外部命令

有很多需求需要在Python中执行shell命令、启动子进程,并捕获命令的输出和退出状态码,类似于Java中的Runtime类库。

subprocess模块的使用:

Python使用最广泛的是标准库的subprocess模块,用来替换os.system(),os.spawn*(),os.popen*()和commands.*等模块与函数。

使用subprocess最简单的方式就是用它提供的便利函数,call,check_all与check_output,当便利函数满足不了要求再使用Popen类。

1. call

subprocess(args,*,stdin=None,stout=None,stderr=None,shell=False)

shell=True,Python会先运行一个shell,再用shell解释字符串,而不是传递一个列表。

2. check_call

check_all与call类似,只是遇到异常情况返回的形式不同,它会抛出subprocess.CalledProcessError异常

3. check_output

这个便利函数是使用最多了,它可以获取命令的结果,而不是退出状态码

如果想要捕捉退出状态码,可以通过抛出的subprocess.CalledProcessError异常

import subprocess

try:

output = subprocess.check_output('ls /zz',shell=True)

except subprocess.CalledProcessError as e:

output = e.output

code = e.returncode

print (code,output)

执行结果:

如果想捕获命令的错误输出,需将错误输出重定向到标准输出

subprocess.check_output(['cmd','arg1','arg2'],stderr=subprocess.STDOUT)

4. 使用Popen

下面的exexute_cmd函数对Popen,进行了封装,执行成功,返回标准输出和状态码,失败是返回状态码和错误输出。

#!/usr/bin/python

#coding=utf8

import subprocess

def execute_cmd(cmd):

p = subprocess.Popen(cmd,

shell=True,

stdin=subprocess.PIPE,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

stdout, stderr = municate()

if p.returncode != 0:

return p.returncode, stderr

return p.returncode, stdout

if __name__=='__main__':

cmd='ls /u01'

returncode,out=execute_cmd(cmd)

if returncode != 0:

raise SystemExit('execute {0} err :{1}'.format(cmd,out))

else:

print("execute command ({0} sucessful)".format(cmd))

目录不存时:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。