python subprocess模块调用shell命令

简介

python中的subprocess模块已经开始代替os模块(os.system,os.spawn,os.popen,popen2.,commands.)调用shell命令,并与之进行信息通信。subprocess模块可以生成新的进程执行shell命令,并与标准输入,输出,错误输出管道通信。

先来看个简单例子,Popen是一个封装类,Popen中第一个参数是shell命令(list格式),第二个和第三个参数分别为标准输出和错误

#!/usr/bin/env python 
 
from subprocess import Popen, PIPE
 
process = Popen(['cat', 'test.py'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
print stdout

process.communicate()函数会从进程中读取shell命令的标准输出和返回的错误,如果要等待子进程执行完成需要加上Popen.wait().

Subprocess call()

subprocess有个call方法可以调用shell命令
用法:subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
实例:

#!/usr/bin/env python

import subprocess
ret = subprocess.call(["ls", "-l"])
print "return value is : %d"%ret
-----------------------------------------------------
total 4
drwxr-xr-x 2 root root   6 Feb 11 16:27 cloudfront-record
drwx------ 3 root root  16 Nov 13 13:46 systemd-private-076a135c402143f78c1000cee846fa41-ntpd.service-AFBhcj
-rw-r--r-- 1 root root 112 Feb 11 17:38 test.py
return value is : 0

我们可以看到执行正确时返回结果为0, call()方法不能获取输出结果

process output

check_output()方法可以获取执行结果
用法 subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

实例:

#!/usr/bin/env python 
import subprocess
ret  = subprocess.check_output(["echo", "hello world"])
print("return value  = " + ret)
--------------------------------------------------------------------
return value  = hello world

你可能感兴趣的:(python subprocess模块调用shell命令)