在 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 模块更强大、更安全,是官方推荐的现代做法。