python中执行shell命令,有三种方法:os.system(),os.popen(),commands。
os.system()就是执行一个命令,返回该命令的退出状态值,如果命令有输出,会直接输出到终端:
status = os.system('ls')
os.popen()是打开一个pipe连向这个命令进程,获取其输出,返回的是一个文件对象,通过read()可以读取内容:
output = os.popen('ls')
print(output.read())
commands.getstatusoutput()就更高档便捷了,可以同时获取返回值和输出内容:
import commands
output = commands.getoutput('ls')
(status, output) = commands.getstatusoutput('ls')
commands.getoutput()就只获取输出内容,相当于os.popen()的效果。当status为0时,才表示命令正确执行了:
(status, output) = commands.getstatusoutput('ls abc')
(status, output)
(512, 'ls: cannot access abc: No such file or directory')
有个奇怪的现象是,当将错误输出导入/dev/null时,返回的status就总是为0了:
commands.getstatusoutput('ls abc &>/dev/null')
(0, 'ls: cannot access abc: No such file or directory')