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

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

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

一、sys 模块的基本使用

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

import sys

二、核心功能与常用变量

1. 命令行参数:sys.argv

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

  • sys.argv[0]:当前脚本的文件名(或路径);
  • sys.argv[1:]:实际传入的参数列表。

示例:创建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表示退出状态:

  • status为整数:0 表示正常退出(默认),非 0 表示异常退出(可被操作系统捕获);
  • status为字符串:会打印该字符串并以状态码 1 退出。

示例

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

  • sys.version:字符串形式的版本信息(如'3.9.7 (default, Sep 10 2021, 14:59:43) [GCC 8.4.0]');
  • 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

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

  • win32:Windows 系统;
  • linux:Linux 系统;
  • darwin:macOS 系统。

示例

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

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

  • sys.pathsep:用于分隔环境变量PATH的符号(Windows 为;,Linux/macOS 为:);
  • sys.sep:路径中的目录分隔符(Windows 为\,Linux/macOS 为/)。

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.exit()exit()的区别:
    • sys.exit()是模块级函数,功能更灵活(支持状态码),适合在脚本中使用;
    • exit()是交互式解释器中的函数,本质上调用sys.exit(),不建议在脚本中使用。
  • sys.path的修改范围:通过sys.path.append()添加的路径仅在当前程序运行时有效,不会修改系统环境变量。
  • 跨平台兼容性:使用sys.platformsys.sep等变量处理路径或系统相关逻辑,避免硬编码(如直接写死\/)。

总结

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

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

相关文章

  • Python中异常处理的5个最佳实践分享

    Python中异常处理的5个最佳实践分享

    异常处理是编写健壮可靠的 Python 代码的一个基本方面,这篇文章为大家整理了Python中异常处理的5个最佳实践,文中的示例代码讲解详细,希望对大家有所帮助
    2024-01-01
  • pandas如何处理缺失值

    pandas如何处理缺失值

    这篇文章主要介绍了pandas如何处理缺失值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python三方库之requests的快速上手

    python三方库之requests的快速上手

    这篇文章主要介绍了python三方库之requests的快速上手,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python常用内置模块你了解吗

    python常用内置模块你了解吗

    这篇文章主要为大家介绍了python的常用内置模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • YOLOv5车牌识别实战教程(八)Web应用与API开发

    YOLOv5车牌识别实战教程(八)Web应用与API开发

    这篇文章主要介绍了YOLOv5车牌识别实战教程(八)Web应用与API开发,在这个教程中,我们将一步步教你如何使用YOLOv5进行车牌识别,帮助你快速掌握YOLOv5车牌识别技能,需要的朋友可以参考下
    2023-04-04
  • Django实现图片文字同时提交的方法

    Django实现图片文字同时提交的方法

    这篇文章主要介绍了Django实现图片文字同时提交的方法,较为详细的分析了Django+jQuery实现图片与文字同时提交的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 如何解决Python中ModuleNotFoundError错误

    如何解决Python中ModuleNotFoundError错误

    使用模块时,了解它们的工作方式以及如何将它们导入我们的代码非常重要, 如果没有这种理解或错误,我们可能会遇到不同的错误,本文我们就来讨论一下在Python中解决 ModuleNotFoundError 的方法,希望对大家有所帮助
    2023-12-12
  • python如何去除字符串中不想要的字符

    python如何去除字符串中不想要的字符

    这篇文章主要为大家详细介绍了python如何去除字符串中不想要的字符,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 关于torch.scatter与torch_scatter库的使用整理

    关于torch.scatter与torch_scatter库的使用整理

    这篇文章主要介绍了关于torch.scatter与torch_scatter库的使用整理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Pycharm IDE安装环境配置的2025最新完整版教程

    Pycharm IDE安装环境配置的2025最新完整版教程

    PyCharm是目前最流行、使用最广泛的Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,下面我们来看看Pycharm IDE安装环境配置的最新教程吧
    2025-03-03

最新评论