python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python sys 模块

Python3 sys 模块常用功能及实战场景

作者:小陶coding

在Python中,sys模块是与解释器交互的桥梁,提供了一系列用于访问 Python 解释器本身和操作系统相关信息的函数与变量,本文将系统讲解sys模块的常用功能及实战场景,帮助你高效利用其特性,感兴趣的朋友跟随小编一起看看吧

在 Python 中,sys模块是与解释器交互的桥梁,提供了一系列用于访问 Python 解释器本身和操作系统相关信息的函数与变量。无论是获取命令行参数、控制程序退出、还是查看系统环境,sys模块都扮演着不可或缺的角色。本文将系统讲解sys模块的常用功能及实战场景,帮助你高效利用其特性。

一、sys 模块的基本使用

sys模块是 Python 标准库的一部分,无需额外安装,直接导入即可使用:

import sys

二、核心功能与常用变量

1. 命令行参数:sys.argv

sys.argv是一个列表,存储程序运行时传入的命令行参数,其中:

示例:创建demo.py脚本:

import sys
print("脚本名:", sys.argv[0])
print("参数列表:", sys.argv[1:])
print("参数个数:", len(sys.argv) - 1)

运行命令及输出:

python demo.py hello world 123

 脚本名: demo.py

参数列表: ['hello', 'world', '123']
参数个数: 3

应用场景:处理命令行输入(如脚本参数解析、批量任务处理)。

2. 退出程序:sys.exit([status])

sys.exit()用于终止当前程序,可选参数status表示退出状态:

示例

import sys
if len(sys.argv) < 2:
    sys.exit("错误:请提供至少一个参数")  # 异常退出,输出提示
sys.exit(0)  # 正常退出

3. 标准输入 / 输出 / 错误流:sys.stdin、sys.stdout、sys.stderr

这三个变量分别代表标准输入(键盘)、标准输出(屏幕)、标准错误流,均为文件对象,可用于重定向输入输出。

示例 1:重定向标准输出到文件

import sys
# 保存原始stdout
original_stdout = sys.stdout
# 将输出写入文件
with open("output.txt", "w") as f:
    sys.stdout = f  # 重定向stdout到文件
    print("这段文字会写入文件")
    print("而不是显示在屏幕上")
# 恢复原始stdout
sys.stdout = original_stdout
print("已恢复正常输出")

示例 2:从标准输入读取内容

import sys
print("请输入内容(按Ctrl+D结束):")
for line in sys.stdin:  # 逐行读取键盘输入
    print("你输入了:", line.strip())

4. 系统相关信息

(1)Python 解释器版本:sys.version、sys.version_info

示例

import sys
if sys.version_info >= (3, 6):
    print("Python 3.6及以上版本,支持f-string")
else:
    print("Python版本过低,不支持f-string")

(2)操作系统平台:sys.platform

返回当前操作系统的标识符,常见值:

示例

import sys
if sys.platform == "win32":
    print("Windows系统,路径分隔符为\\")
elif sys.platform == "linux":
    print("Linux系统,路径分隔符为/")

(3)路径分隔符:sys.pathsep、sys.sep

5. 模块搜索路径:sys.path

sys.path是一个列表,存储 Python 解释器查找模块的路径。当使用import导入模块时,解释器会依次搜索sys.path中的目录。

示例

import sys
print("模块搜索路径:")
for path in sys.path:
    print(path)
# 临时添加自定义路径(程序退出后失效)
sys.path.append("/home/user/my_modules")

应用场景:动态添加自定义模块所在目录,解决 “模块找不到” 问题。

6. 递归深度限制:sys.getrecursionlimit()、sys.setrecursionlimit(n)

Python 默认递归深度限制为 1000,超过会抛出RecursionError。可通过这两个函数查看或修改限制(需谨慎,过大可能导致内存溢出)。

示例

import sys
print("默认递归深度:", sys.getrecursionlimit())  # 输出:1000
sys.setrecursionlimit(2000)  # 修改为2000

三、实战场景示例

1. 命令行参数解析(简易版)

实现一个计算两数之和的脚本,通过命令行传入参数:

import sys
def add(a, b):
    return a + b
if __name__ == "__main__":
    if len(sys.argv) != 3:
        sys.exit("用法:python add.py <数字1> <数字2>")
    try:
        num1 = float(sys.argv[1])
        num2 = float(sys.argv[2])
        print(f"{num1} + {num2} = {add(num1, num2)}")
    except ValueError:
        sys.exit("错误:请输入有效的数字")

运行效果:

python add.py 3.5 4.2

3.5 + 4.2 = 7.7

2. 捕获程序异常并正常退出

在程序崩溃时,通过sys.exit()返回非 0 状态码,便于外部脚本判断执行结果:

import sys
try:
    # 模拟可能出错的代码
    result = 1 / 0
except ZeroDivisionError as e:
    print(f"程序出错:{e}", file=sys.stderr)  # 错误信息写入stderr
    sys.exit(1)  # 异常退出,状态码1
sys.exit(0)  # 正常退出

3. 限制程序运行时间

结合signal模块(Linux/macOS)和sys.exit(),实现程序超时自动退出:

import sys
import signal
def timeout_handler(signum, frame):
    sys.exit("程序超时,自动退出")
# 设置超时时间为5秒
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(5)
# 模拟耗时操作(若超过5秒则触发超时)
import time
time.sleep(6)  # 超过5秒,触发超时

四、注意事项

总结

sys模块是 Python 与系统交互的核心工具,其功能涵盖命令行参数处理、程序退出控制、输入输出重定向、系统信息获取等多个方面。掌握sys.argvsys.exit()sys.path等核心成员,能帮助你编写更灵活、更贴近系统的 Python 程序,尤其在脚本开发、命令行工具编写等场景中不可或缺。合理利用sys模块的特性,可显著提升程序的适应性和可控性。

到此这篇关于Python3 sys 模块的文章就介绍到这了,更多相关Python3 sys 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文