Python调用系统命令:os.system详解

在 Python 编程中,有时我们需要直接调用操作系统命令 ,比如清屏、打开文件、运行外部程序等。这时,os 模块中的 system() 方法就派上用场了!


一、什么是 os.system()?

os.system() 是 Python 标准库 os 模块提供的一个函数,用于在子 shell 中执行系统命令(如 Windows 的 CMD 命令或 Linux/macOS 的终端命令)。

核心作用:让 Python 脚本与操作系统"对话"。


二、基本语法

复制代码
import os

os.system("command")
  • command:要执行的系统命令(字符串)
  • 返回值:命令执行后的退出状态码(0 表示成功,非 0 表示出错)

三、常用示例

1. Windows 系统

复制代码
import os

os.system("cls")          # 清屏
os.system("ipconfig")     # 查看网络配置
os.system("notepad")      # 打开记事本
os.system("ping baidu.com")  # 测试网络连通性

2. Linux / macOS 系统

复制代码
import os

os.system("clear")        # 清屏
os.system("ls -l")        # 列出文件详情
os.system("open .")       # macOS 打开当前文件夹
os.system("xdg-open .")   # Linux 打开当前文件夹

3. 跨平台清屏(兼容写法)

复制代码
import os

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

clear_screen()  # 自动适配 Windows / Unix

四、重要注意事项

1. 无法获取命令输出内容

os.system() 只返回状态码,不返回命令的输出结果!

复制代码
# 错误示范:无法获取 ipconfig 的输出
result = os.system("ipconfig")
print(result)  # 输出:0(表示成功),但看不到IP信息!

正确做法 :使用 subprocess 模块(见下文)。


2. 存在安全风险(命令注入)

如果命令包含用户输入,可能被恶意利用:

复制代码
# 危险代码!
user_input = "192.168.1.1 & del C:\\important_file"
os.system(f"ping {user_input}")  # 可能导致文件被删除!

解决方案:

  • 避免拼接用户输入到命令中
  • 使用 subprocess.run() 并传入参数列表(自动转义)

3. 阻塞主程序

os.system() 会等待命令执行完毕才继续 ,若命令长时间运行(如 pause),程序会卡住。


五、os.system() vs subprocess(推荐替代方案)

表格

功能 os.system() subprocess.run()
获取命令输出 ❌ 不支持 ✅ 支持(capture_output=True)
安全性 ❌ 易受注入攻击 ✅ 参数自动转义
控制输入/输出 ❌ 不能 ✅ 可重定向
跨平台友好性 ⚠️ 一般 ✅ 更好

推荐写法(获取命令输出):

复制代码
import subprocess

# 安全地执行命令并获取输出
result = subprocess.run(
    ["ipconfig"], 
    capture_output=True, 
    text=True, 
    shell=True
)
print(result.stdout)  # 打印命令输出内容

六、总结

场景 是否推荐os.system()
简单操作(如清屏、打开程序) ✅ 可以用
需要命令输出结果 ❌ 请用 subprocess
处理用户输入的命令 ❌ 绝对不要用
生产环境/安全敏感项目 ❌ 优先选 subprocess

💡 口诀 :
"简单任务用 system,复杂需求换 subprocess!"

os.system() 是一个快速执行系统命令的"快捷方式",适合脚本调试或简单自动化任务。但在实际开发中,subprocess 模块更强大、更安全,是官方推荐的现代做法。

相关推荐
智慧城市203016 小时前
关键供应商连续交付不合格批次,说明质量风险可能持续存在。企业需要建立“批次隔离、加严检验、驻厂遏制、复检放行、供应商升级”的处置闭环,同时统筹保供。
数据分析·策略模式·战略咨询·流程管理
happy_baymax1 天前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码2 天前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
mmsx2 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp
博风2 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
mmsx2 天前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
早点睡觉好了3 天前
LangChain 源码入门 02:消息、ChatPromptTemplate 与 Chat Model 调用链
ai·langchain·策略模式
花间相见4 天前
【计算基础|网络12】TCP 抓包与经典边界问题
网络·tcp/ip·策略模式
花间相见4 天前
【计算基础|网络11】TCP(下):拥塞控制与参数优化
网络·tcp/ip·策略模式
小羊没烦恼!4 天前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式