前言
sys
模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。这些函数会影响解释器.- 文档地址
- 这篇文章给常用的一些变量做笔记
sys.argv
一个列表,其中包含了被传递给 Python 脚本的命令行参数。
argv[0]
为脚本的名称(是否是完整的路径名取决于操作系统)。如果是通过Python解释器的命令行参数-c
来执行的,argv[0]
会被设置成字符串'-c'
。如果没有脚本名被传递给Python
解释器,argv[0]
为空字符串。- 其他选项存在后续下标中,如
python main.py -a -b
,argv[1]
为-a
为了遍历标准输入,或者通过命令行传递的文件列表,参照fileinput模块
sys.exec_prefix
- 一个字符串,提供特定域的目录前缀,该目录中安装了与平台相关的 Python 文件,默认也是
'/usr/local'
。 - 该目录前缀可以在构建时使用
configure
脚本的--exec-prefix
参数进行设置。 - 具体而言,所有配置文件(如 pyconfig.h 头文件)都安装在目录
exec_prefix/lib/pythonX.Y/config
中,共享库模块安装在exec_prefix/lib/pythonX.Y/lib-dynload
中,其中 X.Y 是 Python 的版本号,如 3.2。
sys.base_exec_prefix
base_exec_prefix
在python启动的时候且在site.py
运行之前被设置,和exec_prefix
有相同的值(当不使用虚拟环境时)- 如果使用了虚拟环境,
prefix
和exec_prefix
会被改变,用于指向虚拟环境 base_prefix
和base_exec_prefix
会保持指向安装在系统中的python
sys.base_prefix
base_prefix
在python启动的时候且在site.py
运行之前被设置,和prefix
有相同的值(当不使用虚拟环境时)- 如果使用了虚拟环境,
prefix
和exec_prefix
会被改变,用于指向虚拟环境 base_prefix
和base_exec_prefix
会保持指向安装在系统中的python
sys.builtin_module_names
一个元组,包含了所有被编译进了python解释器的模块
sys.exc_info()
本函数返回一个(type, value, traceback)元组:
type
是正在处理的异常类型(它是BaseException
的子类)value
是异常实例(异常类型的实例)traceback
是一个回溯对象,该对象封装了最初发生异常时的调用堆栈。
如果整个堆栈都没有正在处理的异常,则以上3个值均为None
返回的信息仅限于当前线程和当前堆栈帧。如果当前堆栈帧没有正在处理的异常,则信息将从下级被调用的堆栈帧或上级调用者等位置获取,依此类推,直到找到正在处理异常的堆栈帧为止。此处的“处理异常”指的是“执行 except 子句”。任何堆栈帧都只能访问当前正在处理的异常的信息。
sys.last_type
, sys.last_value
, sys.last_traceback
这些变量的含义与上述exc_info()
返回值的含义相同, 它们并非总是有定义,仅当有异常未处理,且解释器打印了错误消息和堆栈回溯时,才会给它们赋值。它们的预期用途,是允许交互中的用户导入调试器模块,进行事后调试,而不必重新运行导致错误的命令。
通常使用
|
|
进入事后调试器,详情请参阅 pdb 模块。
sys.float_info
一个namedtuple
,包含了浮点数相关信息
属性 | float.h 宏 | 说明 |
---|---|---|
epsilon | DBL_EPSILON | 大于 1.0 的最小值和 1.0 之间的差,表示为浮点数。另请参阅 math.ulp()。 |
dig | DBL_DIG | 浮点数可以真实表示的最大十进制数字;见下文 |
mant_dig | DBL_MANT_DIG | 浮点数精度:radix 基数下的浮点数有效位数 |
max | DBL_MAX | 可表示的最大正浮点数(非无穷) |
max_exp | DBL_MAX_EXP | 使得 radix**(e-1) 是可表示的浮点数(非无穷)的最大整数 e |
max_10_exp | DBL_MAX_10_EXP | 使得 10**e 在可表示的浮点数(非无穷)范围内的最大整数 e |
min | DBL_MIN | 可表示的最小正规格化浮点数,使用 math.ulp(0.0) 获取可表示的最小正非规格化 浮点数 |
min_exp | DBL_MIN_EXP | 使得 radix**(e-1) 是规格化浮点数的最小整数 e |
min_10_exp | DBL_MIN_10_EXP | 使得 10**e 是规格化浮点数的最小整数 e |
radix | FLT_RADIX | 指数表示法中采用的基数 |
rounds | FLT_ROUNDS | 整数常数,表示算术运算中的舍入方式。它反映了解释器启动时系统的 FLT_ROUNDS 宏的值。关于可能的值及其含义的说明,请参阅 C99 标准 5.2.4.2.2 节。 |
sys.modules
一个字典,将模块名称映射到所有已加载的模块(使得我们可以通过名字访问模块)。可以操作该字典来强制重新加载模块,或是实现其他技巧。但是,替换的字典不一定会按预期工作,并且从字典中删除必要的项目可能会导致Python
崩溃。
sys.path
-
一个由字符串组成的列表,用于指定模块的搜索路径。初始化自环境变量
PYTHONPATH
,再加上一条与安装有关的默认路径。 -
程序启动时将初始化本列表,列表的第一项
path[0]
目录含有调用Python
解释器的脚本。如果脚本目录不可用(比如以交互方式调用了解释器,或脚本是从标准输入中读取的),则path[0]
为空字符串,这将导致Python优先搜索当前目录中的模块。注意,脚本目录将插入在PYTHONPATH
的条目之前。 -
程序可以随意修改本列表用于自己的目的。只能向
sys.path
中添加string
和bytes
类型,其他数据类型将在导入期间被忽略。
参见site模块 ,该模块描述了如何使用.pth
文件来扩展sys.path
。
sys.platform
本字符串是一个平台标识符,举例而言,该标识符可用于将特定平台的组件追加到 sys.path 中。
对于 Unix 系统(除 Linux 和 AIX 外),该字符串是 Python 构建时的uname -s
返回的小写操作系统名称,并附加了uname -r
返回的系统版本的第一部分,如'sunos5'
或'freebsd8'
。除非需要检测特定版本的系统,否则建议使用以下习惯用法:
|
|
此外,os.name
更加简略, os.uname()
提供系统的版本信息, platform
模块提供了对系统标识更详细的检查。
sys.stdin
, sys.stdout
, sys.stderr
解释器用于标准输入、标准输出和标准错误的文件对象:
stdin
用于所有交互式输入(包括对 input() 的调用);stdout
用于print()
和expression
语句的输出,以及用于input()
的提示符;- 解释器自身的提示符和它的错误消息都发往
stderr
。
这些流都是常规文本文件,与open()
函数返回的对象一致。它们的参数选择如下:
-
字符编码取决于各个平台。在非 Windows 平台上使用的是语言环境 (locale) 编码(可参阅 locale.getpreferredencoding() )。
-
在 Windows 上,控制台设备使用 UTF-8 编码。非字符设备(如磁盘文件和管道)使用系统语言环境编码(即 ANSI 代码页)。非控制台字符设备(即 isatty() 返回的是 True,如 NUL)在启动时,会把控制台输入代码页和输出代码页的值分别用于 stdin 和 stdout/stderr。如果进程原本没有附加到控制台,则默认为系统语言环境编码。
-
要重写控制台的特殊行为,可以在启动 Python 前设置
PYTHONLEGACYWINDOWSSTDIO
环境变量。此时,控制台代码页将用于其他字符设备。 -
在所有平台上,都可以通过在 Python 启动前设置
PYTHONIOENCODING
环境变量来重写字符编码,或通过新的-X utf8
命令行选项和PYTHONUTF8
环境变量来设置。但是,对 Windows 控制台来说,上述方法仅在设置了PYTHONLEGACYWINDOWSSTDIO
后才起效。 -
交互模式下,stdout 流是行缓冲的。其他情况下,它像常规文本文件一样是块缓冲的。两种情况下的
stderr
流都是行缓冲的。要使得两个流都变成无缓冲,可以传入 -u 命令行选项或设置PYTHONUNBUFFERED
环境变量。
在 3.9 版更改: 非交互模式下,stderr
现在是行缓冲的,而不是全缓冲的。
注解:
要从标准流写入或读取二进制数据,请使用底层二进制buffer
对象。例如,要将字节写入stdout
,请使用sys.stdout.buffer.write(b'abc')
。
但是,如果你在写一个库(并且不限制执行库代码时的上下文),那么请注意,标准流可能会被替换为文件类对象,如 io.StringIO,它们是不支持 buffer 属性的。
sys.__stdin__
, sys.__stdout__
, sys.__stderr__
程序开始时,这些对象存有stdin
、stderr
和stdout
的初始值。它们在程序结束前都可以使用,且在需要向实际的标准流打印内容时很有用.(即主要用来恢复标准输入、输出、错误流)
注解 某些情况下的stdin
、stdout
和stderr
以及初始值__stdin__
、__stdout__
和__stderr__
可以是None
。通常发生在未连接到控制台的 Windows GUI app 中,以及在用pythonw启动的 Python app 中。
sys.thread_info
一个namedtuple
,包含线程实现的信息。
属性 | 说明 |
---|---|
name | 线程实现的名称:‘nt’: Windows 线程, ‘pthread’: POSIX 线程, ‘solaris’: Solaris 线程 |
lock | 锁实现的名称:‘semaphore’: 锁使用信号量, ‘mutex+cond’: 锁使用互斥和条件变量, None 如果此信息未知 |
version | 线程库的名称和版本。它是一个字符串,如果此信息未知,则为 None 。 |