在 Python 中,有多种方法可以执行 CMD 命令并获取其返回结果。以下是几种常用的实现方式:


一、使用 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 模块(推荐)


subprocess 模块是 Python 3.5 + 推荐使用的模块,功能更强大、更灵活。


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()

最灵活,支持实时输出

用法复杂

需要实时处理输出或精细控制


推荐使用 subprocess.run (),它平衡了易用性和功能性,且是 Python 官方推荐的方法。


四、注意事项


  1. 跨平台兼容性:Windows 和 Linux/Mac 的 CMD 命令有所不同,编写跨平台程序时需注意区分。
  2. 编码问题:Windows 系统的 CMD 默认编码为 GBK,读取输出时需指定正确的编码。
  3. 安全风险:使用shell=True时要注意命令,避免执行不可信的命令。
  4. 错误处理:应捕获并处理命令执行可能产生的异常,如命令不存在、权限不足等。


通过以上方法,可以在 Python 中灵活地执行 CMD 命令并获取返回结果,满足各种自动化脚本编写需求。