pythonSTL---sys
sys
是 Python 标准库中的一个内置模块,它提供了许多与 Python 解释器和系统环境进行交互的功能。
sys方法
1. 导入 sys
模块
在使用 sys
库的功能之前,需要先导入它:
import sys
2. 命令行参数 (sys.argv
)
sys.argv
是一个包含命令行参数的列表。其中,sys.argv[0]
是脚本的名称,后续的元素是传递给脚本的参数。
import sys
# 打印脚本名称
print(f"脚本名称: {sys.argv[0]}")
# 打印所有命令行参数
for i, arg in enumerate(sys.argv):
print(f"参数 {i}: {arg}")
假设将上述代码保存为 test.py
,在命令行中运行 python test.py arg1 arg2
,输出结果将显示脚本名称和传递的参数。
3. Python 解释器信息
3.1 sys.version
sys.version
是一个字符串,包含了 Python 解释器的版本信息,如 Python 版本号、编译信息等。
import sys
print(sys.version)
3.2 sys.version_info
sys.version_info
是一个 namedtuple
,包含了 Python 版本的主要信息,如主版本号、次版本号、微版本号等。
import sys
print(sys.version_info)
print(f"主版本号: {sys.version_info.major}")
print(f"次版本号: {sys.version_info.minor}")
4. 系统路径 (sys.path
)
sys.path
是一个包含模块搜索路径的列表。Python 在导入模块时,会按照这个列表中的路径顺序进行搜索。
import sys
# 打印系统路径
for path in sys.path:
print(path)
# 可以动态添加路径
sys.path.append('/path/to/your/module')
5. 退出 Python 解释器 (sys.exit()
)
sys.exit()
函数用于退出 Python 解释器。可以传递一个整数参数作为退出状态码,默认状态码为 0 表示正常退出。
import sys
try:
# 一些代码逻辑
result = 1 / 0 # 模拟异常
except ZeroDivisionError:
print("发生除零错误,程序退出")
sys.exit(1) # 以状态码 1 退出
6. 标准输入、输出和错误流
sys
模块提供了对标准输入 (sys.stdin
)、标准输出 (sys.stdout
) 和标准错误 (sys.stderr
) 的访问。
6.1 标准输出重定向
import sys
# 保存原始的标准输出
original_stdout = sys.stdout
# 打开一个文件以写入模式
with open('output.txt', 'w') as f:
# 将标准输出重定向到文件
sys.stdout = f
print("这行文本将被写入文件")
# 恢复标准输出
sys.stdout = original_stdout
print("这行文本将显示在控制台")
6.2 标准输入读取
import sys
# 从标准输入读取一行
line = sys.stdin.readline()
print(f"你输入的内容是: {line.strip()}")
7. 递归深度限制 (sys.getrecursionlimit()
和 sys.setrecursionlimit()
)
Python 解释器对递归调用的深度有一个默认限制,以防止无限递归导致栈溢出。可以使用 sys.getrecursionlimit()
获取当前的递归深度限制,使用 sys.setrecursionlimit()
设置新的递归深度限制。
import sys
# 获取当前递归深度限制
current_limit = sys.getrecursionlimit()
print(f"当前递归深度限制: {current_limit}")
# 设置新的递归深度限制
sys.setrecursionlimit(2000)
new_limit = sys.getrecursionlimit()
print(f"新的递归深度限制: {new_limit}")
8. 平台信息 (sys.platform
)
sys.platform
是一个字符串,用于标识当前 Python 解释器运行的操作系统平台。
import sys
print(f"当前操作系统平台: {sys.platform}")
常见的平台标识符包括 'win32'
(Windows)、'linux'
(Linux)、'darwin'
(macOS)等。
9. 最大整数值 (sys.maxsize
)
sys.maxsize
表示当前平台上 Python 解释器所能表示的最大整数值。
import sys
print(f"最大整数值: {sys.maxsize}")
10. 内置模块信息 (sys.builtin_module_names
)
sys.builtin_module_names
是一个包含所有内置模块名称的元组。
import sys
print("所有内置模块名称:")
for module_name in sys.builtin_module_names:
print(module_name)
11. 内存使用信息 (sys.getsizeof()
)
sys.getsizeof()
函数用于返回对象占用的内存大小(以字节为单位)。
import sys
my_list = [1, 2, 3, 4, 5]
list_size = sys.getsizeof(my_list)
print(f"列表占用的内存大小: {list_size} 字节")
os模块常量
一、平台标识常量
1. os.name
值 | 对应系统 | 典型场景 |
---|---|---|
posix | Linux/macOS | 判断是否支持 Unix 特性 |
nt | Windows | 处理路径分隔符差异 |
java | Jython 环境 | 特殊运行环境检测 |
if os.name == 'posix':
print("正在类 Unix 系统运行")
二、路径操作常量
1. 路径分隔符
常量 | 值 (Win/Linux) | 作用 |
---|---|---|
os.sep | \ / / | 路径层级分隔符(推荐替代硬编码符号) |
os.altsep | / / None | 备用分隔符(Win 兼容 Unix 路径) |
os.extsep | . | 文件名与扩展名的分隔符 |
跨平台路径构建示例:
config_path = ["data", "config", "app.yaml"]
full_path = os.sep.join(config_path) # 自动适配系统分隔符
2. 路径组合符
常量 | 值 (Win/Linux) | 应用场景 |
---|---|---|
os.pathsep | ; / : | 环境变量多路径分隔符(PATH) |
os.defpath | .;/bin / 类似值 | 可执行文件默认搜索路径 |
三、目录符号常量
常量 | 值 | 功能说明 |
---|---|---|
os.curdir | . | 表示当前目录 |
os.pardir | .. | 表示父目录 |
路径解析示例:
parent_dir = os.path.abspath(os.path.join(os.curdir, os.pardir))
四、文件操作常量
1. 文件存在性及权限检查
常量 | 二进制掩码 | 用途 |
---|---|---|
os.F_OK | 0 | 检查文件是否存在 |
os.R_OK | 4 | 检查读权限 |
os.W_OK | 2 | 检查写权限 |
os.X_OK | 1 | 检查执行权限 |
权限验证代码:
if os.access("/usr/bin/python", os.X_OK):
print("文件可执行")
2. 文件打开模式(需配合 os.open
)
常量 | 功能说明 |
---|---|
os.O_RDONLY | 只读模式 |
os.O_WRONLY | 只写模式 |
os.O_RDWR | 读写模式 |
os.O_CREAT | 文件不存在时创建 |
os.O_EXCL | 与 O_CREAT 配合使用防覆盖 |
文件创建示例:
fd = os.open("data.log", os.O_WRONLY | os.O_CREAT, 0o644)
3. 文件指针定位
常量 | 对应值 | 描述 |
---|---|---|
os.SEEK_SET | 0 | 文件起始位置 |
os.SEEK_CUR | 1 | 当前指针位置 |
os.SEEK_END | 2 | 文件末尾位置 |
五、特殊设备常量
常量 | 路径 (Win/Linux) | 用途 |
---|---|---|
os.devnull | nul / /dev/null | 空设备(丢弃输出) |
使用示例:
with open(os.devnull, 'w') as f:
sys.stdout = f # 禁用标准输出
六、其他实用常量
常量 | 说明 |
---|---|
os.linesep | 系统换行符(\n /\r\n ) |
os.supports_follow_symlinks | 函数是否支持符号链接追踪 |
综合应用场景
跨平台路径处理模板
import os
def safe_join(base, *paths):
"""跨平台安全路径拼接"""
full_path = os.path.abspath(os.path.join(base, *paths))
if not os.path.exists(full_path):
os.makedirs(full_path, exist_ok=True)
return full_path.replace(os.sep, '/') # 统一为 Unix 风格路径
权限检查工具函数
def validate_permissions(filepath):
"""详细权限检查"""
checks = [
(os.F_OK, "存在性"),
(os.R_OK, "可读性"),
(os.W_OK, "可写性"),
(os.X_OK, "可执行性")
]
for flag, desc in checks:
print(f"{desc}: {'√' if os.access(filepath, flag) else '×'}")
注意事项
-
平台差异性
Windows 和 Linux 的常量表现不同,建议通过os.path
模块函数代替直接操作常量 -
常量只读性
所有os
模块常量均为只读,修改会触发AttributeError
-
版本兼容
Python 3.10+ 新增os.O_TMPFILE
(Linux 专属)等常量,需注意版本差异