官方文档:sys — 系统相关的形参和函数 — Python 3.12.7 文档
在日常的Python开发中,我们常常需要与Python解释器本身进行交互,例如读取命令行参数、处理标准输入输出、或是获取系统相关的信息。这时,sys模块就成了我们不可或缺的利器。本文将深入浅出地介绍Python标准库中的sys模块,并通过实例代码展示其核心功能,助你更精准地掌控Python的运行时环境。
文章目录
1. 什么是sys模块?
sys模块是Python的一个内置标准库,它提供了大量与Python解释器紧密相关的变量和函数。这意味着你可以通过sys模块来访问和操作Python运行时的环境参数和系统资源。
使用前,需要先导入它:
import sys
2. sys模块的常用功能
2.1 命令行参数:sys.argv
sys.argv 是一个列表,它包含了从命令行传递给Python脚本的所有参数。
argv[0]:脚本的名称argv[1]、argv[2]…:后续的命令行参数
示例 (test_argv.py):
import sys
print("脚本名:", sys.argv[0])
print("参数列表:", sys.argv[1:])
print("参数个数:", len(sys.argv) - 1)
在命令行中执行:
python test_argv.py arg1 arg2 arg3
输出:
脚本名: test_argv.py
参数列表: ['arg1', 'arg2', 'arg3']
参数个数: 3
2.2 程序退出:sys.exit([arg])
sys.exit() 用于退出当前运行的程序。你可以传递一个可选的整数参数作为退出状态码。按照惯例,0 表示成功(正常退出),非0值 表示出现了某种错误。
示例:
import sys
def main():
# ... 一些程序逻辑 ...
if some_error_condition:
print("发生错误,程序即将退出!")
sys.exit(1) # 非0状态码表示异常退出
else:
print("程序执行成功!")
sys.exit(0) # 0状态码表示成功退出
if __name__ == "__main__":
main()
2.3 模块搜索路径:sys.path
sys.path 是一个列表,指定了Python解释器在导入模块时所要搜索的所有目录。初始化时,它包含:
- 当前脚本所在的目录
- 环境变量
PYTHONPATH指定的目录集 - Python安装时的默认安装路径
你可以动态地修改这个列表来添加你自己的模块路径。如果你想让代码调用某个文件夹下的包,就用sys.path.append(folder_path)把文件夹添加进去。
示例:
import sys
print("当前模块搜索路径:")
for path in sys.path:
print(f" {path}")
# 添加一个新的路径到搜索列表中
new_path = "/home/user/my_modules"
sys.path.append(new_path)
# 现在可以导入位于 /home/user/my_modules 下的模块了
2.4 已加载模块:sys.modules
sys.modules 是一个字典,它将模块名映射到已经加载的模块对象。它可以用来查看当前Python环境中已导入的所有模块,或者强制重新加载一个模块(虽然通常更推荐使用importlib.reload())。
示例:
import sys
import math
# 检查 'math' 模块是否已被加载
if 'math' in sys.modules:
print("math模块已被导入")
print(f"模块对象: {sys.modules['math']}")
2.5 系统平台信息:sys.platform
sys.platform 是一个字符串,用于标识当前Python解释器正在运行的操作系统平台。它常用于编写跨平台的代码。
示例:
import sys
print(f"当前操作系统平台: {sys.platform}")
if sys.platform.startswith('win'):
# Windows特定的代码
print("运行在Windows系统上")
elif sys.platform.startswith('linux'):
# Linux特定的代码
print("运行在Linux系统上")
elif sys.platform == 'darwin':
# macOS特定的代码
print("运行在macOS系统上")
2.6 Python版本信息:sys.version 和 sys.version_info
sys.version:一个字符串,包含详细的版本信息。sys.version_info:一个元组,包含版本号的各个部分(主版本、次版本等),更容易进行版本判断。
示例:
import sys
print("版本详细信息:", sys.version)
print("版本信息元组:", sys.version_info)
# 检查Python版本是否至少为3.6
if sys.version_info >= (3, 6):
print("支持f-string等Python 3.6+特性")
else:
print("请升级到Python 3.6或更高版本")
2.7 标准输入/输出/错误流
sys模块提供了三个重要的标准流对象:
sys.stdin:标准输入流(用于接收输入)sys.stdout:标准输出流(用于正常输出)sys.stderr:标准错误流(用于输出错误信息)
你可以重定向这些流,例如将错误信息输出到文件。
示例:
import sys
# 正常输出到stdout
sys.stdout.write("这是一条普通消息\n")
print("这也是一条普通消息") # print()默认输出到sys.stdout
# 错误信息输出到stderr
sys.stderr.write("这是一条错误消息!\n")
# 重定向stderr到一个文件(高级用法)
with open('error.log', 'w') as f:
sys.stderr = f
# 现在所有的stderr都会写入error.log文件
sys.stderr.write("这条错误会被记录到文件里\n")
# 恢复原来的stderr
sys.stderr = sys.__stderr__
2.8 追踪函数的调用信息:sys.settrace(func)
sys.settrace(func):追踪函数的调用信息,当func为None时停止追踪。连同sys.stderr的用法可参考从0开始的爬虫实践项目 (4):用百度搜索,然后检索搜索结果网址中的信息这篇博文
2809

被折叠的 条评论
为什么被折叠?



