sys模块提供对由解释器使用或维护的某些变量、与解释器交互的函数的访问接口。
在使用标准configure脚本构建python的POSIX系统上,该属性包含了PEP 3149中规定的ABI标志。
传递给python脚本的命令行参数列表。argv[0]
表示脚本名称(是不是完成路径名取决于操作系统)。如果命令使用-c选项执行,argv[0]
表示字符串-c
。如果命令行没有指定脚本名称,argv[0]
为空字符串。
本机字节顺序的指示符。大尾平台上值是"big",小尾平台上值是"little"
编译到python编译器的所有模块的名称的字符串列表
返回与python解释器有关的版权信息
清除内部类型缓存。类型缓存用于加速属性、方法查找。仅在引用泄露调试期间删除不必要的引用时使用。
此函数应仅用于内部和专用用途
返回函数调用时,每个线程标识符与该线程中处于活动状态的顶层堆栈帧的字典映射。traceback
模块中的函数可以通过给定这样的帧构建调用堆栈。
这对于调试死锁是非常有用的:此函数不需要死锁线程的合作,而且只要它们保持死锁状态,调用堆栈都将被冻结。到调用代码检查帧时,非死锁线程返回的帧可能与该线程的当前活动没有关系。
此函数应仅用于内部和专用用途
打印CPython内存分配器状态的低级信息到stderr。
如果python构建使用了-with-pydebug
配置,此方法还会执行一些昂贵的内部一致性检查
此方法特定于CPython解释器使用
指定python DLL句柄的整数,仅在windows平台可用
如果值为True,导入源模块时python将不会写入.pyc文件。该值初始化设置为True或False,取决于命令行选项-B以及PYTHONDONTWRITEBYTECODE
环境变量,用户可以通过设置值来控制字节码文件的生成
返回三个值的元组,它们提供有关当前正在处理的异常的信息。返回的信息特定于当前线程以及当前堆栈帧。如果当前堆栈帧无异常处理,则信息来自正在调用的堆栈帧或堆栈帧的调用者,等等,直到发现正在处理异常的堆栈帧。这里的“处理异常”指的是执行except
子句。对于任何堆栈帧而言,只能访问当前正处理的异常的信息
如果堆栈中的任何地方都无异常处理,返回包含3个None值的元组。否则返回包含(type, value, traceback)的元组。type指当前正处理的异常的类型,value指异常实例,traceback获取一个追踪对象,它封装了异常最初发生的地方的调用堆栈
返回python解释器的可执行二进制文件的绝对路径。如果python无法获取其真实路径,返回空字符串或None
退出python。此方法实际上是通过抛出SystemExit
异常实现的,因此try语句中finally子句的清理操作仍会得到执行,且能在外层拦截退出意图
import sys
try:
sys.exit(1)
except SystemExit:
print("catch exception...")
finally:
print("cleanup action...")
可选参数arg说明退出状态(默认为0),可以是整数,也可以是其他类型的对象。如果是整数,0视为"成功终止",任何非零整数都将视为"异常终止"。大多数系统要求其范围在0-127之间,否则可能产生不确定的结果。Unix程序通常用2表示命令行语法错误,1表示其他所有异常。如果传入了非整型对象,None等同0,其他对象都等同1,且会被打印到stderr。sys.exit("some error message")
是错误发生时快速退出程序的一种方法。
因为exit()
基本上只是抛出异常,当在主线程中调用它且没有捕获异常时,它仅会退出程序
返回解释器当前分配的内存块数量。主要用于追踪和调试内存泄漏。受解释器内部缓存影响,每次调用返回的值都可能不一样,可以通过调用_clear_type_cache()
和gc.collect()
方法获取更可预测的结果。
出于某些原因,这个值可能无法计算,将返回0
返回安卓API版本的构建时间,以整数表示。仅适用于安卓平台
返回解释器的检查间隔。在3.2版本中被getswitchinterval()
替代
Unicode使用的默认字符编码名称
文件名的Unicode形式和字节形式相互转换使用的编码名称。为了更好的兼容性,在所有情况下都应该使用字符串形式的文件名,尽管也支持字节形式。接收或返回文件名的函数应该支持str或bytes类型并在内部转换为系统偏向的展示格式。
返回的编码总是兼容ASCII
os.fsencode()
和os.fsdecode()
使用此方法返回的编码进行编解码处理
文件名的Unicode形式和字节形式相互转换使用的错误模式。
返回object的引用次数,通常高于期待值,因为包含了object作为参数传递给此方法的临时引用
python解释器堆栈当前设置的最大递归深度,可以通过setrecursionlimit()
设置。
返回任意对象的字节大小。所有的内置对象都能返回正确的结果,但对于第三方扩展不一定适用。
Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.
对于未提供获取大小的方式的对象,返回default。如果未提供default,抛出TypeError
异常。
getsizeof()
函数调用对象的__sizeof__
方法,如果对象由垃圾回收器管理,还会计算额外的垃圾回收器开销
返回解释器的线程切换间隔
返回描述当前运行的Windows版本信息的命名元组。命名的元素是major, minor, build, platform, service_pack, service_pack_minor, service_pack_major, suite_mask, product_type和platform_version。
service_pack是一个字符串,platform_version是一个长度为3的元组,其他元素的值都是整数。各个元素还可以通过名称访问,比如sys.getwindowsversion()[0]
等同于sys.getwindowsversion().major
(仅前5个元素可通过下标访问)。
platform的值为2(VER_PLATFORM_WIN32_NT)
product_type的值为下列中的一个:
platform_version返回当前操作系统的精确major版本、minor版本和版本号(build number)。
>>> import sys
>>> sys.getwindowsversion()
sys.getwindowsversion(major=10, minor=0, build=17134, platform=2, service_pack='')
>>> sys.getwindowsversion().platform_version
(10, 0, 17134)
编码为单个整数的版本号。每个版本都保证会增加,包括对非生产版本的支持。测试python解释器版本是否在1.5.2以上的示例:
if sys.hexversion >= 0x010502F0:
# use some advanced feature
...
else:
# use an alternative implementation or warn the user
...
之所以称其为hexversion,是因为它仅在传递给hex()
函数返回十六进制的结果时才看起来有意义。使用sys.version_info
可以显示更人性化的相同信息。
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=0, releaselevel='final', serial=0)
>>> sys.hexversion
50790640
>>> hex(sys.hexversion)
'0x30700f0'
hexversion是一个具有以下布局的32位数字:
因此2.1.0a3
是hexversion0x020100a3
当前运行的python解释器的实现信息。下列属性在不同的python实现上都存在:
sys.version_info
相同的格式,表示python实现的版本。对于Cpython来说,sys.implementation.version
和sys.version_info
值相同。sys.hexversion
sys.implementation
可能包含特定python实现的额外属性。非标准属性必须以"_"开头。无论其内容如何,sys.implementation
都不会在解释器运行期间或实现版本之间发生变化
保存python整数的内部表示的结构序列。属性只读:
number of bits held in each digit. Python integers are stored internally in base 2**int_info.bits_per_digit
size in bytes of the C type used to represent a digit
如果python解释器正在关闭,返回True。
这三个属性并不一定存在,它们在异常未被处理且解释器打印异常的错误信息以及堆栈跟踪后才被设置。它们的用途在于允许交互式用户导入调试器模块并进行post-mortem
调试而无需重新执行导致异常的代码。
它们的含义与sys.exc_info()
返回值的含义相同。
>>> sys.last_traceback
>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute 'last_traceback'
>>> raise Exception("throw")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: throw
>>> sys.last_type
<class 'Exception'>
>>> sys.last_value
Exception('throw',)
>>> sys.last_traceback
<traceback object at 0x7f4ec9653208>
Py_ssize_t
类型的变量可接受的最大整数值。通常在32位平台上是2 ** 31 - 1
,在64位平台上是2 ** 63 - 1
Unicode码表可接受的最大整数位(1114111或"0x10FFFF")
映射已导入的模块名和模块的字典对象。可操作此属性实现强制重新加载模块等。不过替换字典对象不一定能实现预期效果,删除基本项也可能造成python错误
说明模块搜索路径的字符串列表。初始化自环境变量PYTHONPATH
以及依赖于安装的默认值。
sys.path在程序启动时初始化,sys.path[0]表示启用python解释器的脚本所在的目录。如果该目录不可用(比如解释器是通过交互式调用的,或脚本读取自标准输入),则sys.path[0]为空字符串,表示python优先在当前工作目录搜索模块。
程序可以自由地修改sys.path列表。只有字符串和字节序列形式的路径才生效,其他类型都将被忽略。
Note:脚本目录在环境变量PYTHONPATH
之前插入sys.path。
表示平台标识符的字符串。可用于添加特定于平台的组件到sys.path中,或其他用途。
对于Unix系统(Linux除外),它的值是uname -s
指令返回的OS名称的小写格式与uname -r
指令返回的版本信息的第一部分的组合,如sunos5
或freebsd8
。除非是针对特定的系统版本,推荐使用如下方式:
if sys.platform.startswith('freebsd'):
# FreeBSD-specific code here...
elif sys.platform.startswith('linux'):
# Linux-specific code here...
其他系统对应的值:
3.3版本改动:Linux系统上,sys.platform的值将由'linux'替代'linux2'或'linux3',不再包含主版本。推荐使用上面的startswith
,因为能够兼容老版本的python代码。
python解释器的首要、次要提示符。仅在交互模式下被定义,初始值分别是>>>
和...
自3.2版本弃用。该函数不再有效,因为重写了线程切换和异步任务的内在逻辑。使用setswitchinterval()
替代
设置python解释器堆栈的最大深度为limit。可避免无限递归导致的堆栈溢出和python崩溃。
最大递归深度依赖于平台。当程序需要且平台也能提供更大深度的递归支持时,用户可以设置更大的limit值。
如果limit值设置的过小不能满足当前递归深度要求时,将抛出RecursionError
异常
设置解释器的线程切换间隔(单位为秒,浮点类型)。interval确定分配给并发运行的python线程的"timesices"的理想持续时间。实际值可以设置的更高,尤其是使用长时间运行的内部函数或方法。
interval时间结束后的线程调度由操作系统决定,而不是解释器。
改变默认文件系统编码和错误模式为"mbcs"和"replace",与python3.6之前的版本保持一致。仅限Windows平台使用。
等同于启动python前,定义PYTHONLEGACYWINDOWSFSENCODING
环境变量。
解释器用于标准输入、输出和错误的文件对象:
input()
)print()
和表达式语句,以及input()
的提示这些流是常规的文本文件(text file)对象,它们的参数选择如下:
locale.getpreferredencoding()
)。不过所有平台都可以通过在启动python前,设置PYTHONIOENCODING
环境变量重写编码。Note:要从标准流中读取二进制数据或写入二进制数据到标准流,使用底层的二进制buffer
对象。例如写入字节到stdout,使用sys.stdout.buffer.write(b"abc")
。然而如果你是在写一个python库,且不控制其代码在哪个上下文中执行,要注意标准流可能被不支持buffer
属性的file-like
对象如io.StringIO
替换。
包含线程实现信息的结构序列。
发生未处理的异常时,打印的回溯信息的最大层级。默认为1000。当设置为0或负数时,所有的回溯信息受到打印抑制,而只打印type和value
>>> raise Exception("throw")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: throw
>>> sys.tracebacklimit = 0
>>> raise Exception("throw")
Exception: throw
包含python解释器版本号、使用的编译器及其构建号信息的字符串。在交互模式下启动python时会显示。不要直接在sys.version
上提取版本信息,应该使用sys.version_info
和platform
模块提供的功能
解释器使用的C的接口版本。在调试python和扩展模块的版本冲突时可能有用。
包含python版本信息的元组,命名元素分别为major, minor, micro, releaselevel和serial。除releaselevel外的所有值都是整数,releaselevel的值是"alpha", "beta", "candidate"或"final"中的一个。可以通过属性或下标访问。
>>> sys.version_info
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
warnings
框架的实现细节,不要修改。
通过"-X"命令行选项传递的特定实现标志的字典对象(特定于CPython的访问方式)。
$ ./python -Xa=b -Xc
Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys._xoptions
{'a': 'b', 'c': True}