python-执行系统命令

2022-07-19, updated 2022-07-24

os.system方法

这个方法是直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行后的返回信息。

os.system(cmd)的返回值。如果执行成功,那么会返回0,表示命令执行成功。否则,则是执行错误。

使用os.system返回值是脚本的退出状态码,该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码。

os.system()返回值为0 linux命令返回值也为0

os.system()返回值为256,十六位二进制数为: 00000001 00000000, 高八位转为十进制为1 对应linux命令返回值1

os.system()返回值为512,十六位二进制数为: 00000010 00000000,高八位转为16进制为2 对应linux命令返回值2

1
2
3
4
import os

result = os.system('cat /etc/passwd')
print(result)  # 0

os.popen方法

os.popen()方法不仅执行命令而且返回执行后的信息对象(常用于需要获取执行命令后的返回信息),是通过一个管道文件将结果返回。通过os.popen()返回的是file read的对象,对其进行读取read()的操作可以看到执行的输出。

1
2
3
4
import os

result = os.popen('cat /etc/passwd')
print(result.read())

commands模块

1
2
3
4
5
6
7
8
import command

status = commands.getstatus('cat /etc/passwd')
print(status)
output = commands.getoutput('cat /etc/passwd')
print(output)
(status, output) = commands.getstatusoutput('cat /etc/passwd')
print(status, output)

subprocess模块

subprocess是一个功能强大的子进程管理模块,是替换os.system,os.spawn*等方法的一个模块。

当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess

1
2
3
4
5
6
7
8
9
import subprocess

res = subprocess.Popen('cat /etc/passwd', shell=True, stdout = subprocess.PIPE, stderr=subprocess.STDOUT)  # 使用管道

# print res.stdout.read()  # 标准输出

for line in res.stdout.readlines():
    print line
res.stdout.close()  # 关闭

总结

os.system: 获取程序执行命令的返回值 os.popen: 获取程序执行命令的输出结果 commands: 获取返回值和命令的输出结果

words: 722 tags: python