跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 操作 CMD 命令行详解与实战

Python 通过 os、subprocess 和 shutil 等标准库提供操作系统交互能力。如何使用这些模块执行命令、获取输出、管理文件及处理错误。涵盖跨平台兼容性、安全性分析及最佳实践,帮助开发者高效实现命令行自动化控制。

PhpPioneer发布于 2025/2/7更新于 2026/6/220 浏览
Python 操作 CMD 命令行详解与实战

Python 操作 CMD 命令行详解与实战

引言

命令行界面(Command Line Interface,简称 CLI)是计算机操作系统中一种基于文本的用户界面,通过输入命令来与计算机进行交互。在自动化运维、脚本编写及系统管理场景中,CLI 的高效性无可替代。Python 作为一门强大的编程语言,提供了丰富的标准库和模块,可以方便地操作 CMD 或 Shell,实现复杂的系统控制任务。

本文将详细介绍如何使用 Python 的 os、subprocess 和 shutil 等模块来操作命令行,涵盖基础执行、输出捕获、文件管理及安全性分析,助您高效掌握命令行控制能力。

一、Python 中的 os 模块

os 模块是 Python 中用于提供与操作系统进行交互接口的一个标准库。它封装了常用的操作系统功能,如路径处理、进程启动、环境变量读取等。

1. 执行 CMD 命令

os 模块提供了 os.system(command) 函数来执行 CMD 命令。该函数会阻塞当前程序直到命令执行完毕,并返回命令的退出状态码。

import os

# 执行 CMD 命令
exit_code = os.system("ping www.example.com")
print(f"命令执行结束,退出码:{exit_code}")

注意:os.system 默认使用系统的 shell 解释器,存在命令注入风险。在处理用户输入时,建议优先使用 subprocess 模块。

2. 获取当前目录与环境变量

使用 os.getcwd() 可获取当前工作目录,os.environ 可访问环境变量。

import os

# 获取当前目录
current_dir = os.getcwd()
print(f"当前目录:{current_dir}")

# 获取环境变量
path_var = os.environ.get('PATH', '')
print(f"系统 PATH 长度:{len(path_var)}")

3. 创建和删除文件夹

使用 os.mkdir(path) 创建单级文件夹,os.makedirs(path, exist_ok=True) 创建多级文件夹。删除文件夹需使用 os.rmdir(path)(仅空目录)或配合 shutil。

import os

# 创建文件夹
try:
    os.mkdir("test_dir")
    ()
 FileExistsError:
    ()


 os.path.exists()   os.listdir():
    os.rmdir()
print
"文件夹创建成功"
except
print
"文件夹已存在"
# 删除空文件夹
if
"test_dir"
and
not
"test_dir"
"test_dir"

二、Python 中的 subprocess 模块

subprocess 模块是 Python 中用于创建新进程、连接到子进程并与其进行通信的标准库。相比 os.system,它更灵活、安全,支持流式读写、超时控制和错误处理。

1. 获取 CMD 命令的输出

使用 subprocess.run() 是最推荐的方式。参数 capture_output=True 表示捕获标准输出和标准错误,text=True 确保返回字符串而非字节。

import subprocess

# 执行 CMD 命令并获取输出
result = subprocess.run(
    ["dir"], 
    capture_output=True, 
    text=True,
    encoding='gbk' # Windows CMD 常用编码
)

# 打印输出结果
if result.returncode == 0:
    print(result.stdout)
else:
    print(f"错误信息:{result.stderr}")

2. 向 CMD 写入输入

部分命令需要交互式输入,可通过 input 参数传递数据。

import subprocess

# 执行 echo 命令并写入输入
result = subprocess.run(
    ["echo", "Hello World"], 
    input="www.example.com", 
    capture_output=True, 
    text=True
)
print(result.stdout.strip())

3. 高级用法:Popen 与管道

对于需要实时交互或后台运行的进程,可使用 subprocess.Popen。

import subprocess

# 启动后台进程
proc = subprocess.Popen(["ping", "8.8.8.8"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 读取输出
stdout, stderr = proc.communicate()
print(stdout.decode())

三、Python 中的 shutil 模块

shutil 模块提供了高层文件操作接口,常用于复制、移动、删除文件和文件夹,比直接调用底层 API 更安全便捷。

1. 复制文件和文件夹

shutil.copy(src, dst) 复制文件内容,shutil.copytree(src, dst) 递归复制整个目录树。

import shutil
import os

# 确保目标目录存在
os.makedirs("test", exist_ok=True)

# 复制文件
try:
    shutil.copy("example.txt", "test/")
    print("文件复制成功")
except FileNotFoundError:
    print("源文件不存在")

2. 移动文件和文件夹

shutil.move(src, dst) 将文件或文件夹移动到指定位置,若目标在同一磁盘则重命名,跨盘则复制后删除原文件。

import shutil

# 移动文件
shutil.move("example.txt", "test/example_moved.txt")

3. 删除文件和文件夹

shutil.rmtree(path) 可删除非空文件夹及其所有内容,os.remove(path) 仅删除文件。

import os
import shutil

# 删除文件
if os.path.isfile("example.txt"):
    os.remove("example.txt")

# 删除文件夹及其所有内容
if os.path.isdir("test"):
    shutil.rmtree("test")

四、安全性与最佳实践

1. 防止命令注入

在使用 subprocess 时,务必避免拼接字符串传递给 shell=True。始终使用列表形式传递参数。

# ❌ 危险示例
user_input = "test; rm -rf /"
subprocess.run(f"echo {user_input}", shell=True)  # 可能导致严重破坏

# ✅ 安全示例
subprocess.run(["echo", user_input])  # 参数被转义,不会执行恶意命令

2. 跨平台兼容性

Windows 使用 CMD/PowerShell,Linux/macOS 使用 Bash/Zsh。命令语法不同(如 dir vs ls),代码应做适配。

import platform
import subprocess

system = platform.system()
command = ["ls"] if system != "Windows" else ["dir"]

result = subprocess.run(command, capture_output=True, text=True)
print(result.stdout)

3. 异常处理与超时

长时间运行的命令可能导致程序挂起,应设置 timeout 参数。

import subprocess

try:
    result = subprocess.run(
        ["sleep", "10"], 
        timeout=5, 
        capture_output=True, 
        text=True
    )
except subprocess.TimeoutExpired:
    print("命令执行超时")

五、总结

通过 Python 操作 CMD,我们可以方便地执行命令、获取输出、创建、复制、移动和删除文件和文件夹等操作。使用 os、subprocess 和 shutil 等模块,我们可以轻松玩转命令行控制,提高工作效率。

在实际开发中,建议遵循以下原则:

  1. 优先使用 subprocess 代替 os.system。
  2. 始终验证用户输入,防止命令注入。
  3. 处理编码问题,特别是在 Windows 环境下。
  4. 为长耗时命令添加超时机制。

希望本文能对您有所帮助,助您更好地使用 Python 进行系统管理与自动化控制。

目录

  1. Python 操作 CMD 命令行详解与实战
  2. 引言
  3. 一、Python 中的 os 模块
  4. 1. 执行 CMD 命令
  5. 执行 CMD 命令
  6. 2. 获取当前目录与环境变量
  7. 获取当前目录
  8. 获取环境变量
  9. 3. 创建和删除文件夹
  10. 创建文件夹
  11. 删除空文件夹
  12. 二、Python 中的 subprocess 模块
  13. 1. 获取 CMD 命令的输出
  14. 执行 CMD 命令并获取输出
  15. 打印输出结果
  16. 2. 向 CMD 写入输入
  17. 执行 echo 命令并写入输入
  18. 3. 高级用法:Popen 与管道
  19. 启动后台进程
  20. 读取输出
  21. 三、Python 中的 shutil 模块
  22. 1. 复制文件和文件夹
  23. 确保目标目录存在
  24. 复制文件
  25. 2. 移动文件和文件夹
  26. 移动文件
  27. 3. 删除文件和文件夹
  28. 删除文件
  29. 删除文件夹及其所有内容
  30. 四、安全性与最佳实践
  31. 1. 防止命令注入
  32. ❌ 危险示例
  33. ✅ 安全示例
  34. 2. 跨平台兼容性
  35. 3. 异常处理与超时
  36. 五、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 腾讯 WorkBuddy:免部署 AI 智能体,兼容 OpenClaw 技能 | 多端支持
  • Obsidian 笔记同步至 Gitee 云存储指南
  • DeepSeek 各版本演进与核心能力对比
  • 鸿蒙应用架构设计:基于 ArkTS 的声明式 UI 与响应式状态管理
  • 渗透测试入门实战指南:从基础到实践
  • 华为 OD 机试真题:部门人力分配
  • Java 基础知识体系总结
  • 二叉树前中后序遍历详解:递归与迭代实现
  • AniShort 发布:AI 短剧协作平台与生产流程重构
  • DevEco Studio 一体化工程迁移指南
  • AI 工作流实战:基于 Dify 构建日报生成器
  • PyTorch 文本引导图像生成与 Stable Diffusion 实践
  • Java Lambda 与匿名内部类为何不能修改外部变量?解析 Final 与等效 Final
  • Windows 11 下使用 llama.cpp 运行 Qwen3.5 量化模型实测
  • 基于C++构建DeepSeek大模型推理SDK:架构设计与工程实践
  • AI 大模型全解析:定义、架构与核心应用
  • AI Agent 智能体核心架构与实战解析
  • 全球 AI 大模型最新排名:Gemini 3.1 Pro 与 GPT-5.4 并列第一,GLM-5 进前五
  • 从 Webhook 到 OpenClaw:钉钉周报提醒机器人进化史
  • 剑指 Offer 动态规划与记忆化搜索解题总结

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online