上一篇
Python执行CMD命令的完整教程 - 从入门到精通
- Python
- 2025-07-19
- 22
Python执行CMD命令的完整教程
本教程将教你如何在Python中执行CMD命令,涵盖多种方法及其适用场景。通过学习,你将掌握使用os和subprocess模块运行命令、获取输出以及处理错误等实用技能。
为什么需要在Python中执行CMD命令?
Python执行CMD命令在以下场景非常有用:
- ✓ • 自动化系统管理任务
- ✓ • 调用外部程序或脚本
- ✓ • 批量处理文件操作
- ✓ • 集成第三方命令行工具
- ✓ • 执行系统诊断和监控
使用os模块执行命令
Python的os
模块提供了基本的命令执行功能:
方法1: os.system()
import os
# 执行简单的命令
os.system("dir") # Windows
os.system("ls") # Linux/Mac
# 执行带参数的命令
os.system("ping www.baidu.com")
# 获取命令返回值
return_code = os.system("echo Hello, World!")
print(f"命令返回码: {return_code}")
方法2: os.popen()
import os
# 执行命令并获取输出
output = os.popen("ipconfig").read()
print(output)
# 执行命令并逐行处理结果
with os.popen("systeminfo") as stream:
for line in stream:
if "OS 名称" in line:
print(line.strip())
使用subprocess模块(推荐)
subprocess
模块提供了更强大和灵活的命令执行功能:
方法1: subprocess.run()
import subprocess
# 基本用法
result = subprocess.run(["ping", "www.baidu.com"], capture_output=True, text=True)
print(result.stdout)
# 获取返回码
if result.returncode == 0:
print("命令执行成功!")
else:
print(f"命令执行失败,错误码: {result.returncode}")
# 超时控制
try:
result = subprocess.run(["ping", "www.baidu.com", "-t"], timeout=5)
except subprocess.TimeoutExpired:
print("命令执行超时!")
方法2: subprocess.Popen()
import subprocess
# 执行命令并实时获取输出
process = subprocess.Popen(
["python", "-c", "import time; [print(i) or time.sleep(0.5) for i in range(5)]"],
stdout=subprocess.PIPE,
text=True
)
# 实时读取输出
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
print(output.strip())
# 等待命令完成
return_code = process.wait()
print(f"命令结束,返回码: {return_code}")
方法3: subprocess.check_output()
import subprocess
# 获取命令输出
try:
output = subprocess.check_output(
["python", "--version"],
stderr=subprocess.STDOUT,
text=True
)
print(f"Python版本信息: {output.strip()}")
except subprocess.CalledProcessError as e:
print(f"命令执行错误: {e.output}")
不同方法的比较
方法 | 特点 | 适用场景 |
---|---|---|
os.system() |
简单易用,直接输出到控制台 | 快速测试和简单命令 |
os.popen() |
可以获取命令输出 | 需要输出结果的简单命令 |
subprocess.run() |
功能全面,推荐使用 | 大多数命令执行需求 |
subprocess.Popen() |
灵活,支持异步操作 | 长时间运行或需要交互的命令 |
subprocess.check_output() |
直接获取输出 | 只需要命令输出结果的场景 |
实用技巧和注意事项
1. 处理带空格的路径
# 错误方式(可能导致问题)
subprocess.run("C:/Program Files/App/app.exe")
# 正确方式
subprocess.run(["C:/Program Files/App/app.exe"]) # 作为列表的第一个元素
# 或者
subprocess.run(r'"C:\Program Files\App\app.exe"', shell=True)
2. 安全警告:命令注入风险
# 危险!不要这样使用
user_input = input("请输入文件名: ")
os.system(f"rm {user_input}") # 用户可能输入恶意命令
# 安全做法:使用参数列表
user_input = input("请输入文件名: ")
subprocess.run(["rm", user_input]) # 安全
3. 设置工作目录
import subprocess
# 在指定目录中执行命令
result = subprocess.run(
["dir"],
cwd="C:/MyProject", # 设置工作目录
capture_output=True,
text=True
)
print(result.stdout)
4. 环境变量管理
import subprocess
import os
# 添加新的环境变量
env = os.environ.copy()
env["CUSTOM_PATH"] = "D:/Custom"
# 使用自定义环境执行命令
result = subprocess.run(
["echo", "%CUSTOM_PATH%"],
env=env,
capture_output=True,
text=True,
shell=True
)
print(result.stdout)
总结
在Python中执行CMD命令有多种方法,根据需求选择最合适的:
- 对于简单命令,
os.system()
和os.popen()
足够使用 - 对于大多数应用场景,推荐使用
subprocess.run()
- 需要实时交互或长时间运行的任务,使用
subprocess.Popen()
- 仅需要命令输出时,
subprocess.check_output()
很方便
始终注意:
- 避免使用
shell=True
,除非必要 - 永远不要直接拼接用户输入到命令中
- 处理命令执行超时和错误情况
- 为跨平台脚本考虑不同操作系统的命令差异
本文由SongE于2025-07-19发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://pjw.521pj.cn/20255994.html
发表评论