Python调用CMD命令教程 - 实用指南
- Python
- 2025-07-17
- 639
Python调用CMD命令完全指南
本教程详细讲解Python中执行CMD命令的多种方法,包括os.system、os.popen和subprocess模块的使用,并提供实际代码示例和安全建议。
为什么需要在Python中调用CMD命令?
Python调用CMD命令在以下场景中非常有用:
- 自动化系统管理任务(如文件操作、服务管理)
- 执行外部程序或脚本
- 与操作系统深度交互
- 批量处理任务
- 调用系统工具(ping, ipconfig等)
Python调用CMD命令的三种主要方法
1. os.system()
最简单的执行命令方法,直接执行并返回退出状态码。
✓ 使用简单,适合快速执行命令
✗ 无法获取命令输出
✗ 安全性较低
2. os.popen()
执行命令并返回一个文件对象,可以读取命令输出。
✓ 可以获取命令输出
✗ 不推荐使用(Python 3已被subprocess替代)
3. subprocess模块
Python官方推荐的方法,功能最全面最安全。
✓ 可以控制输入/输出/错误流
✓ 支持超时设置
✓ 安全性高
方法一:使用os.system()
os.system()是执行CMD命令最简单的方法,它会在子shell中执行命令并返回命令的退出状态码。
使用os.system执行命令
import os
# 执行简单的dir命令
exit_code = os.system('dir')
# 执行ping命令
os.system('ping -n 3 www.google.com')
# 获取命令执行结果(0表示成功)
print(f"命令执行状态: {exit_code}")
注意:os.system()方法无法捕获命令输出,只能获取退出状态码。对于需要输出内容的情况,请使用其他方法。
方法二:使用os.popen()
os.popen()方法可以执行命令并返回一个文件对象,通过该对象可以读取命令的输出。
使用os.popen读取命令输出
import os
# 执行命令并获取输出
output = os.popen('ipconfig').read()
# 打印命令输出
print("网络配置信息:")
print(output)
# 执行带参数的命令
disk_info = os.popen('wmic logicaldisk get caption, freespace, size').read()
print("磁盘信息:")
print(disk_info)
提示:虽然os.popen()可以获取命令输出,但在Python 3中更推荐使用subprocess模块,因为它提供了更强大的功能。
方法三:使用subprocess模块(推荐)
subprocess模块是Python中执行外部命令的首选方法,它提供了更灵活和安全的接口。
3.1 使用subprocess.run()(Python 3.5+)
基础用法:执行命令并获取结果
import subprocess
# 执行命令并等待完成
result = subprocess.run(
['ping', '-n', '3', 'www.baidu.com'],
capture_output=True, # 捕获输出
text=True, # 以文本形式返回
check=True # 检查命令执行状态(非零退出码抛出异常)
)
# 输出命令执行结果
print("返回码:", result.returncode)
print("标准输出:", result.stdout)
print("标准错误:", result.stderr)
3.2 处理命令输出
实时处理命令输出
import subprocess
# 执行命令并实时处理输出
process = subprocess.Popen(
['ping', '-n', '10', 'www.google.com'],
stdout=subprocess.PIPE,
text=True
)
# 逐行读取输出
print("开始ping测试:")
for line in process.stdout:
print(line.strip()) # 实时处理每一行输出
# 等待命令执行完成
process.wait()
print(f"命令执行完成,返回码: {process.returncode}")
3.3 设置超时
为命令执行设置超时
import subprocess
try:
# 执行可能长时间运行的命令
result = subprocess.run(
['ping', '-n', '20', 'www.example.com'],
timeout=5, # 5秒后超时
capture_output=True,
text=True
)
except subprocess.TimeoutExpired:
print("命令执行超时,已终止")
# 处理超时后继续执行其他操作
安全注意事项
在执行外部命令时,务必考虑安全性问题:
命令注入风险:永远不要直接执行用户提供的输入,这可能导致命令注入攻击。
不安全的做法(避免使用)
# 危险!可能被恶意利用
user_input = input("请输入文件名: ")
os.system(f"del {user_input}") # 如果用户输入"*.*"会删除所有文件
安全的做法(使用subprocess)
user_input = input("请输入文件名: ")
# 使用列表形式传递参数,避免命令注入
subprocess.run(['del', user_input])
常用CMD命令Python示例
功能 | CMD命令 | Python实现 |
---|---|---|
列出目录内容 | dir | subprocess.run(['dir'], shell=True) |
网络诊断 | ping | subprocess.run(['ping', '-n', '4', 'example.com']) |
网络配置 | ipconfig | result = subprocess.run(['ipconfig'], capture_output=True, text=True) |
系统信息 | systeminfo | subprocess.run('systeminfo', shell=True) |
文件复制 | copy | subprocess.run(['copy', 'source.txt', 'dest.txt'], shell=True) |
创建目录 | mkdir | subprocess.run(['mkdir', 'new_directory']) |
总结与最佳实践
在Python中执行CMD命令时,请遵循以下建议:
- 优先使用subprocess模块,特别是subprocess.run()方法
- 避免使用os.system()和os.popen(),除非有特殊需求
- 永远不要直接执行用户提供的字符串(防止命令注入)
- 使用列表形式传递命令和参数
- 为长时间运行的命令设置超时
- 适当处理命令输出和错误流
- 在Windows环境中使用
shell=True
时要格外小心
通过合理使用Python执行CMD命令,你可以创建强大的系统管理工具和自动化脚本,大大提高工作效率。
本文由JiHuNan于2025-07-17发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://pjw.521pj.cn/20255816.html
发表评论