Python 调用 Windows CMD 命令的多种实现方式
在 Python 开发中,执行系统命令(如 Windows 的 CMD 或 Linux 的 Shell)是一项常见且实用的任务。它可以帮助开发者自动化文件处理、系统管理、数据清洗以及与其他工具交互等场景。Windows 环境下,CMD 命令行提供了丰富的系统控制能力。
本文将详细介绍如何在 Python 中安全、高效地执行 CMD 命令的多种方法,包括使用标准库 subprocess、os 模块,以及第三方库 pyautogui 和底层 ctypes 库。我们将对比它们的优缺点,并提供最佳实践建议。
一、使用 subprocess 模块(推荐)
subprocess 模块是 Python 3.x 的标准库之一,用于创建和管理子进程。它是执行系统命令的首选方案,因为它提供了强大的灵活性、安全性以及对输入输出流的精细控制。
1. 基本用法
以下示例演示如何使用 subprocess.run() 执行简单的 CMD 命令:
import subprocess
# 执行 dir 命令,shell=True 表示在 shell 环境中执行
result = subprocess.run('dir', shell=True, stdout=subprocess.PIPE, text=True)
# 打印命令输出
print(result.stdout)
参数说明:
shell=True:允许使用 shell 特性(如管道|、重定向>),但在 Windows 上默认值为 True,Linux 上为 False。注意:使用shell=True时需谨慎处理用户输入,以防命令注入攻击。stdout=subprocess.PIPE:捕获命令的标准输出。text=True(Python 3.7+):返回字符串而非字节流,方便直接处理文本。
2. 错误处理与返回值
在实际应用中,捕获异常和处理非零退出码至关重要:
import subprocess
try:
result = subprocess.run(
'ping -n 4 127.0.0.1',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
timeout=10
)
if result.returncode == 0:
print("命令执行成功")
print(result.stdout)
else:
print(f"命令执行失败,错误代码:")
(result.stderr)
subprocess.TimeoutExpired:
()
Exception e:
()


