腾讯云主机网站建设教程,网站建设的要求及标准,武义县建设局网站,建筑公司简历模板有很多需求需要在Python中执行shell命令、启动子进程#xff0c;并捕获命令的输出和退出状态码#xff0c;类似于Java中的Runtime类库。
subprocess模块的使用#xff1a;
Python使用最广泛的是标准库的subprocess模块#xff0c;用来替换os.system(),os.spawn*(),os.popen…有很多需求需要在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,*,stdinNone,stoutNone,stderrNone,shellFalse)shellTrue,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,shellTrue)
except subprocess.CalledProcessError as e:
output e.output
code e.returncode
print (code,output)
执行结果如果想捕获命令的错误输出需将错误输出重定向到标准输出
subprocess.check_output([cmd,arg1,arg2],stderrsubprocess.STDOUT)4. 使用Popen
下面的exexute_cmd函数对Popen进行了封装执行成功返回标准输出和状态码失败是返回状态码和错误输出。
#!/usr/bin/python
#codingutf8
import subprocess
def execute_cmd(cmd):
p subprocess.Popen(cmd,
shellTrue,
stdinsubprocess.PIPE,
stdoutsubprocess.PIPE,
stderrsubprocess.PIPE)
stdout, stderr p.communicate()
if p.returncode ! 0:
return p.returncode, stderr
return p.returncode, stdout
if __name____main__:
cmdls /u01
returncode,outexecute_cmd(cmd)
if returncode ! 0:
raise SystemExit(execute {0} err :{1}.format(cmd,out))
else:
print(execute command ({0} sucessful).format(cmd))目录不存时