当前位置: 首页 > article >正文

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

对应系统典型场景
posixLinux/macOS判断是否支持 Unix 特性
ntWindows处理路径分隔符差异
javaJython 环境特殊运行环境检测
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_OK0检查文件是否存在
os.R_OK4检查读权限
os.W_OK2检查写权限
os.X_OK1检查执行权限

权限验证代码

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_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 专属)等常量,需注意版本差异


http://www.kler.cn/a/586173.html

相关文章:

  • Upload-labs靶场通关(2)
  • DeepSeek 助力 C++ 开发:探索智能编程新境界
  • 大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)
  • 【论文精读】Deformable DETR:用于端到端目标检测可变形 Transformer
  • PHP:从入门到进阶的全方位指南
  • 微软 System Center Configuration Manager(SCCM)的组件文件
  • tauri项目加载静态html和js文件,并打包发布
  • arm内核寄存器错误定位技巧【持续更新】
  • 生活在缝缝补补中前进
  • oralce sql 查询rownum1到1000的数据
  • 信息安全意识之安全组织架构图
  • 将 IPoIB 驱动修改为仅使用 RC 模式
  • linux(ubuntu)中Conda、CUDA安装Xinference报错ERROR: Failed to build (llama-cpp-python)
  • 操作系统知识点29
  • SpringBoot中使用kaptcha生成验证码
  • IOS兼容 - uniapp ios固定定位失效与刘海屏的坑
  • HarmonyOS第22天:解锁鸿蒙服务开发
  • object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别
  • vue 知识点整理
  • WinSW-x64(2.12.0)将nginx注册为服务可能有bug