一、使用 os 模块
1. os.popen () 方法
python
import os# 执行CMD命令
cmd = "dir" # Windows系统示例,列出当前目录文件
result = os.popen(cmd)# 读取返回结果
output = result.read()
print("命令输出结果:")
print(output)# 关闭文件流
result.close()
2. os.system () 方法
python
import os# 执行命令并将结果重定向到临时文件
cmd = "ipconfig > temp.txt" # Windows系统示例,获取IP配置
os.system(cmd)# 读取临时文件内容
with open("temp.txt", "r", encoding="gbk") as f: # Windows系统默认编码为gbkoutput = f.read()
print("命令输出结果:")
print(output)# 删除临时文件
os.remove("temp.txt")
二、使用 subprocess 模块(推荐)
1. subprocess.run () 方法(Python 3.5+)
python
import subprocess# 执行命令并捕获输出
cmd = ["echo", "Hello, CMD!"] # Linux/Mac示例
# cmd = ["dir"] # Windows示例
result = subprocess.run(cmd, stdout=subprocess.PIPE, # 捕获标准输出stderr=subprocess.PIPE, # 捕获错误输出text=True, # 输出为字符串类型(Python 3.7+,旧版本可用universal_newlines=True)shell=True # Windows系统执行内部命令时需要设置为True
)# 获取标准输出和错误输出
stdout = result.stdout
stderr = result.stderrprint("标准输出:")
print(stdout)if stderr:print("错误输出:")print(stderr)
2. subprocess.Popen () 方法
python
import subprocess# 执行命令
cmd = "ping www.baidu.com -n 4" # Windows系统示例,ping百度4次
p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True,text=True
)# 实时读取输出
print("实时输出:")
while True:line = p.stdout.readline()if not line:breakprint(line.strip())# 等待命令执行完成并获取返回码
p.wait()
print(f"命令退出码:{p.returncode}")
三、方法对比与推荐
方法 | 优点 | 缺点 | 适用场景 |
os.popen() | 简单易用 | 功能有限,安全性较低 | 简单命令执行 |
os.system() | 兼容性好 | 无法直接获取输出,需重定向 | 只关心命令是否执行成功 |
subprocess.run() | 功能全面,安全可靠 | 相对复杂 | Python 3.5 + 推荐使用 |
subprocess.Popen() | 最灵活,支持实时输出 | 用法复杂 | 需要实时处理输出或精细控制 |