目录

pythonSTL-sys

pythonSTL—sys

sys 是 Python 标准库中的一个内置模块,它提供了许多与 Python 解释器和系统环境进行交互的功能。

在使用 sys 库的功能之前,需要先导入它:

import sys

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 ,输出结果将显示脚本名称和传递的参数。

sys.version 是一个字符串,包含了 Python 解释器的版本信息,如 Python 版本号、编译信息等。

import sys
print(sys.version)

sys.version_info 是一个 namedtuple ,包含了 Python 版本的主要信息,如主版本号、次版本号、微版本号等。

import sys
print(sys.version_info)
print(f"主版本号: {sys.version_info.major}")
print(f"次版本号: {sys.version_info.minor}")

sys.path 是一个包含模块搜索路径的列表。Python 在导入模块时,会按照这个列表中的路径顺序进行搜索。

import sys

# 打印系统路径
for path in sys.path:
    print(path)

# 可以动态添加路径
sys.path.append('/path/to/your/module')

sys.exit() 函数用于退出 Python 解释器。可以传递一个整数参数作为退出状态码,默认状态码为 0 表示正常退出。

import sys

try:
    # 一些代码逻辑
    result = 1 / 0  # 模拟异常
except ZeroDivisionError:
    print("发生除零错误,程序退出")
    sys.exit(1)  # 以状态码 1 退出

sys 模块提供了对标准输入 ( sys.stdin )、标准输出 ( sys.stdout ) 和标准错误 ( sys.stderr ) 的访问。

import sys

# 保存原始的标准输出
original_stdout = sys.stdout

# 打开一个文件以写入模式
with open('output.txt', 'w') as f:
    # 将标准输出重定向到文件
    sys.stdout = f
    print("这行文本将被写入文件")

# 恢复标准输出
sys.stdout = original_stdout
print("这行文本将显示在控制台")
import sys

# 从标准输入读取一行
line = sys.stdin.readline()
print(f"你输入的内容是: {line.strip()}")

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}")

sys.platform 是一个字符串,用于标识当前 Python 解释器运行的操作系统平台。

import sys

print(f"当前操作系统平台: {sys.platform}")

常见的平台标识符包括 'win32' (Windows)、 'linux' (Linux)、 'darwin' (macOS)等。

sys.maxsize 表示当前平台上 Python 解释器所能表示的最大整数值。

import sys

print(f"最大整数值: {sys.maxsize}")

sys.builtin_module_names 是一个包含所有内置模块名称的元组。

import sys

print("所有内置模块名称:")
for module_name in sys.builtin_module_names:
    print(module_name)

sys.getsizeof() 函数用于返回对象占用的内存大小(以字节为单位)。

import sys

my_list = [1, 2, 3, 4, 5]
list_size = sys.getsizeof(my_list)
print(f"列表占用的内存大小: {list_size} 字节")

对应系统典型场景
posixLinux/macOS判断是否支持 Unix 特性
ntWindows处理路径分隔符差异
javaJython 环境特殊运行环境检测
if os.name == 'posix':
    print("正在类 Unix 系统运行")

常量值 (Win/Linux)作用
os.sep\ / /路径层级分隔符(推荐替代硬编码符号)
os.altsep/ / None备用分隔符(Win 兼容 Unix 路径)
os.extsep.文件名与扩展名的分隔符

跨平台路径构建示例

config_path = ["data", "config", "app.yaml"]
full_path = os.sep.join(config_path)  # 自动适配系统分隔符
常量值 (Win/Linux)应用场景
os.pathsep; / :环境变量多路径分隔符(PATH)
os.defpath.;/bin / 类似值可执行文件默认搜索路径

常量功能说明
os.curdir.表示当前目录
os.pardir..表示父目录

路径解析示例

parent_dir = os.path.abspath(os.path.join(os.curdir, os.pardir))

常量二进制掩码用途
os.F_OK0检查文件是否存在
os.R_OK4检查读权限
os.W_OK2检查写权限
os.X_OK1检查执行权限

权限验证代码

if os.access("/usr/bin/python", os.X_OK):
    print("文件可执行")
常量功能说明
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)
常量对应值描述
os.SEEK_SET0文件起始位置
os.SEEK_CUR1当前指针位置
os.SEEK_END2文件末尾位置

常量路径 (Win/Linux)用途
os.devnullnul / /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 '×'}")

  1. 平台差异性

    Windows 和 Linux 的常量表现不同,建议通过 os.path 模块函数代替直接操作常量

  2. 常量只读性

    所有 os 模块常量均为只读,修改会触发 AttributeError

  3. 版本兼容

    Python 3.10+ 新增 os.O_TMPFILE (Linux 专属)等常量,需注意版本差异