目录
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函数所替代的
本文详细介绍了Python中执行系统命令的多种方式,包括os.system、os.popen、commands及subprocess模块的使用方法与限制。对比了不同函数的特性,如状态码返回、命令执行结果获取及线程阻塞情况,帮助读者选择最适合场景的执行方式。

272

被折叠的 条评论
为什么被折叠?



