目录
os.system
这是通过调用标准C函数system()命令实现的,并且具有相同的限制条件。
在Unix平台上, 返回值是执行命令的 状态码
,0表示成功,其他表示失败。并将命令执行结果输出到屏幕上。
import os
print (os.system("mkdir test_system"))
0
print (os.system("mkdir test_system"))
mkdir: cannot create directory ‘test_system’: File exists
256
在linux环境中,第一次创建test_system
文件夹成功,返回值为0
, 第二次创建失败,因为文件夹已经有了, 所以返回值为256
。
os.popen
该方法通过调用管道
的方式来实现的,在调用结束后,会返回一个 file 对象,支持read()和write()方法,具体根据command而定。
- 可以
获取命令执行结果
,但无法获取命令执行状态码
- 调用会
阻塞当前线程
,直到运行完毕
os.popen(command [, mode, buffering])
command:调用命令
mode:返回 file 对象的模式,默认为 “r” 只读模式
buffering:缓冲区大小,默认 -1 为无限制
import os
print (os.popen('pwd').read())
/home/ta/workspace
commands
commands模块只存在于Python 2.7+,且不支持Windows平台。python3.x中移除
, 被subprocess.getstatusoutput()
替代, 由于返回值中无法区分stderr和stdout。
subprocess
《python subprocess模块 命令执行》
https://blog.csdn.net/whatday/article/details/89881822
联系与区别
函数名 | 描述 | 限制 |
---|---|---|
os.system (cmd) | 返回命令执行状态码 ,并将命令执行结果 输出到屏幕 | 无 |
os.popen (cmd) | 返回file对象 ,调用read()和write()方法获取命令执行结果,无法获取命令执行状态码 | 无 |
commands.getstatusoutput (cmd) | 返回一个元组 (命令执行状态码,执行结果) | 只存在于Python 2.7,且不支持Windows平台, python3.x中移除 , 被subprocess.getstatusoutput() 替代 |
subprocess | 新开一个子进程,让其执行别的程序 | 无 |
在Python中执行系统命令,不同的场景中可以考虑使用不同的函数,但是os.system
,os.popen
,commands.getstatusoutput
这些函数都是可以被subprocess函数
所替代的