os 模块:文件路径、环境变量、系统命令

在软件开发与运维工作中,操作系统交互是核心能力之一:管理文件、读取环境变量、执行系统命令、处理路径差异,几乎贯穿开发、测试、部署、运维的每一个环节。Python 的 os 模块为开发者提供了高效、跨平台的接口,让程序可以方便地访问操作系统资源,同时保持代码可移植性和可维护性。
一、os 模块概览
os 模块提供了以下几类功能:
- 文件和目录操作:创建、删除、遍历、重命名
- 路径处理:跨平台路径拼接、拆分、规范化
- 环境变量:获取、设置、删除系统环境变量
- 系统命令执行:运行外部命令、获取命令输出
- 操作系统信息:获取当前工作目录、用户信息、系统类型等
这些功能在开发自动化脚本、测试工具、部署工具时极为重要。
二、文件与目录操作
1. 基本操作
import os
# 获取当前工作目录
cwd = os.getcwd()
print(cwd)
# 列出目录下的文件
print(os.listdir("."))
# 创建目录
os.mkdir("test_dir")
# 创建多级目录
os.makedirs("parent/child", exist_ok=True)
# 重命名
os.rename("test_dir", "new_dir")
# 删除目录
os.rmdir("new_dir")
os.removedirs("parent/child") # 删除多级目录
技巧:
exist_ok=True避免重复创建导致异常- 使用
os.path.exists判断文件/目录存在性
if not os.path.exists("data"):
os.mkdir("data")
2. 文件操作
# 检查是否为文件或目录
print(os.path.isfile("example.txt")) # True/False
print(os.path.isdir("example.txt")) # True/False
# 获取文件大小
print(os.path.getsize("example.txt"))
# 获取文件修改时间
print(os.path.getmtime("example.txt"))
三、路径处理
os.path 模块提供跨平台路径处理方法:
# 拼接路径
file_path = os.path.join("folder", "subfolder", "file.txt")
print(file_path)
# 分割路径
dir_name, base_name = os.path.split(file_path)
print(dir_name, base_name)
# 获取文件扩展名
name, ext = os.path.splitext(base_name)
print(name, ext)
# 规范化路径
normalized = os.path.normpath("folder//subfolder/../file.txt")
print(normalized)
启示:
- 避免手动拼接路径(不同系统分隔符不同)
- 使用
os.path保持跨平台兼容性
四、环境变量操作
环境变量在配置、部署、系统参数管理中至关重要。
# 获取环境变量
path = os.environ.get("PATH")
print(path)
# 设置环境变量(仅对当前进程及子进程有效)
os.environ["MY_VAR"] = "123"
print(os.environ["MY_VAR"])
# 删除环境变量
os.environ.pop("MY_VAR", None)
应用场景:
- 控制程序行为:如 DEBUG 模式、日志级别
- 数据库连接参数、API 密钥管理
- CI/CD 自动化脚本中的系统配置
五、执行系统命令
1. os.system
os.system("echo Hello, World!")
- 简单、直接
- 不易获取输出结果
2. 使用 os.popen 获取输出
stream = os.popen("ls -l")
output = stream.read()
print(output)
3. 高级推荐:结合 subprocess 模块(兼容性更好)
import subprocess
result = subprocess.run(["echo", "Hello"], capture_output=True, text=True)
print(result.stdout)
启示:
os.system用于简单命令或脚本执行- 获取输出或处理错误时,
subprocess更强大、安全
六、跨平台开发技巧
- 使用 os.path.join 拼接路径,避免硬编码分隔符
- 使用 os.sep、os.name 判断系统类型,实现不同系统逻辑
- 文件权限管理:
os.chmod("script.sh", 0o755) # 设置可执行权限
- 避免直接修改系统环境变量,使用进程级变量或配置文件
七、应用案例
1. 自动化日志管理
import os
import datetime
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
today = datetime.date.today().isoformat()
log_file = os.path.join(log_dir, f"log_{today}.txt")
with open(log_file, "a") as f:
f.write(f"{datetime.datetime.now()} - 系统启动\n")
2. 配置文件与环境变量结合
db_host = os.environ.get("DB_HOST", "localhost")
db_port = int(os.environ.get("DB_PORT", 3306))
print(f"连接数据库: {db_host}:{db_port}")
3. 脚本自动执行系统命令
backup_dir = "/tmp/backup"
os.makedirs(backup_dir, exist_ok=True)
for file in os.listdir("."):
if file.endswith(".txt"):
os.system(f"cp {file} {backup_dir}/")
八、设计与使用启示
-
抽象操作系统接口
os模块让开发者无需关注底层实现,专注于业务逻辑。 -
增强跨平台能力
os.path和环境变量操作保证代码在 Windows、Linux、macOS 下一致运行。 -
安全与可维护性
- 避免直接执行用户输入的系统命令
- 环境变量管理集中化,避免硬编码
-
自动化与运维结合
使用os模块可以轻松实现日志管理、文件整理、备份脚本、部署流程自动化。
九、总结
Python 的 os 模块是操作系统交互的基石,掌握它可以让开发者:
- 高效管理文件与目录
- 安全处理环境变量
- 执行系统命令,实现自动化运维
- 构建跨平台、可维护的脚本和工具
启示:os 模块不仅是工具集合,更是一种操作系统抽象与自动化思维的体现。熟练使用它,能让开发者在开发、测试、运维各环节游刃有余,同时保持代码可移植性和可维护性。

6万+

被折叠的 条评论
为什么被折叠?



