Python 的 os
和 sys
是两个功能截然不同但都非常重要的内置库,它们分别服务于不同的交互场景:前者专注于与操作系统交互,后者专注于与 Python 解释器本身交互。以下是详细解析:
一、os 库:操作系统交互接口
os
库(Operating System 的缩写)是 Python 与操作系统交互的核心接口,提供了访问操作系统底层功能的方法,涵盖文件操作、进程管理、环境变量等与操作系统相关的功能。
核心功能分类
-
文件与目录操作
提供创建、删除、重命名、移动文件/目录的能力,以及路径处理等功能。os.mkdir(path)
:创建单个目录os.makedirs(path)
:递归创建多级目录os.remove(path)
:删除文件os.rmdir(path)
:删除空目录os.rename(old, new)
:重命名文件/目录os.listdir(path)
:列出目录下的所有文件和子目录os.getcwd()
:获取当前工作目录os.chdir(path)
:切换当前工作目录
示例:
import os os.makedirs("data/logs", exist_ok=True) # 递归创建目录(若已存在则不报错) print(os.listdir("data")) # 列出 data 目录下的内容
-
路径处理(os.path 子模块)
专门处理不同操作系统的路径格式(如 Windows 的\
和 Linux 的/
),提供跨平台兼容性。os.path.join(path1, path2)
:拼接路径(自动适配操作系统格式)os.path.abspath(path)
:判断路径是否存在os.path.isfile(path)
/os.path.isdir(path)
:判断是否为文件/目录os.path.abspath(path)
:获取绝对路径
示例:
import os.path full_path = os.path.join("data", "file.txt") # 跨平台路径拼接 print(os.path.abspath(full_path)) # 输出绝对路径(如 /home/user/data/file.txt)
-
环境变量操作
读取和修改系统环境变量。os.environ
:获取所有环境变量(字典形式)os.environ.get(key)
:获取指定环境变量的值os.environ[key] = value
:设置环境变量(仅在当前进程有效)
示例:
print(os.environ.get("PATH")) # 打印系统 PATH 环境变量 os.environ["TEMP_DIR"] = "./temp" # 设置临时环境变量
-
系统命令与进程管理
执行系统命令或管理进程。os.system(command)
:执行系统命令(返回退出状态码)os.popen(command)
:执行命令并获取输出流os.getpid()
:获取当前进程 IDos.kill(pid, signal)
:向指定进程发送信号(如终止进程)
示例:
os.system("ls -l") # 在 Linux 中列出当前目录详情 print("当前进程 ID:", os.getpid())
二、sys 库:Python 解释器交互接口
sys
库(System 的缩写)用于与 Python 解释器本身交互,提供对解释器配置、运行状态、命令行参数等的控制能力。
核心功能分类
-
命令行参数处理
获取运行 Python 脚本时传入的命令行参数。sys.argv
:一个列表,其中sys.argv[0]
是脚本文件名,sys.argv[1:]
是传入的参数
示例:
若执行python script.py 100 hello
,则:import sys print(sys.argv) # 输出:['script.py', '100', 'hello']
-
解释器配置与限制
调整 Python 解释器的运行参数和限制。sys.setrecursionlimit(limit)
:设置递归深度上限sys.getsizeof(obj)
:获取对象占用的内存大小(字节)sys.version
:获取 Python 解释器版本信息
示例:
import sys sys.setrecursionlimit(10000) # 提高递归深度限制 print("Python 版本:", sys.version)
-
标准输入/输出控制
控制解释器的默认输入输出流。sys.stdin
:标准输入流(可用于读取用户输入)sys.stdout
:标准输出流(默认打印目标)sys.stderr
:标准错误流(用于输出错误信息)
示例:
import sys sys.stdout.write("这是标准输出\n") # 等效于 print() sys.stderr.write("这是错误信息\n") # 通常显示为红色(终端中)
-
模块搜索路径
管理 Python 解释器查找模块的路径列表。sys.path
:一个列表,包含解释器搜索模块的路径- 可通过
sys.path.append(path)
添加自定义模块路径
示例:
import sys sys.path.append("/home/user/custom_modules") # 添加自定义模块路径 print("模块搜索路径:", sys.path)
-
程序退出控制
控制程序的退出状态。sys.exit(status)
:终止程序运行,status=0
表示正常退出,非 0 表示异常退出
示例:
import sys if len(sys.argv) < 2:sys.exit(1) # 若未传入参数,异常退出(状态码 1)
三、核心区别总结
对比维度 | os 库 | sys 库 |
---|---|---|
核心目标 | 与操作系统交互(文件、进程等) | 与 Python 解释器交互(配置、参数等) |
操作对象 | 操作系统资源(文件系统、环境变量等) | 解释器本身(命令行参数、运行状态等) |
典型应用场景 | 创建文件、执行系统命令、处理路径 | 解析命令行参数、调整解释器限制、控制退出 |
跨平台性 | 封装了不同系统的差异(如路径分隔符) | 与解释器相关,跨平台性由解释器保证 |
四、实际应用中的配合
os
和 sys
常结合使用,例如:
- 用
sys.argv
获取命令行传入的文件路径,再用os.path
处理路径,最后用os
操作文件。 - 用
sys.exit()
根据os
操作的结果(如文件是否存在)决定程序是否正常退出。
理解两者的定位和功能,能更高效地处理与系统交互和解释器控制相关的任务。