28.1. sys — 系统特定的参数和函数 — Python 文档
28.1. 系统 — 系统特定的参数和功能
该模块提供对解释器使用或维护的一些变量以及与解释器强烈交互的函数的访问。 它始终可用。
- sys.argv
传递给 Python 脚本的命令行参数列表。
argv[0]
是脚本名称(它是否为完整路径名取决于操作系统)。 如果使用解释器的 -c 命令行选项执行命令,则argv[0]
设置为字符串'-c'
。 如果没有将脚本名称传递给 Python 解释器,则argv[0]
是空字符串。要循环标准输入或命令行上给出的文件列表,请参阅 fileinput 模块。
- sys.byteorder
本机字节顺序的指示符。 这将在 big-endian(最重要的字节在前)平台上具有值
'big'
,在 little-endian(最不重要的字节在前)平台上具有'little'
。2.0 版中的新功能。
- sys.builtin_module_names
- 一个字符串元组,给出了编译到这个 Python 解释器中的所有模块的名称。 (此信息无法通过任何其他方式获得 —
modules.keys()
仅列出导入的模块。)
- sys.call_tracing(func, args)
- 在启用跟踪时调用
func(*args)
。 跟踪状态被保存,然后恢复。 这旨在从检查点的调试器中调用,以递归调试其他一些代码。
- sys.copyright
- 包含与 Python 解释器相关的版权的字符串。
- sys._clear_type_cache()
清除内部类型缓存。 类型缓存用于加速属性和方法查找。 在引用泄漏调试期间使用函数 only 删除不必要的引用。
此功能应仅用于内部和专门用途。
2.6 版中的新功能。
- sys._current_frames()
返回一个字典,将每个线程的标识符映射到调用函数时当前在该线程中处于活动状态的最顶层堆栈帧。 请注意,traceback 模块中的函数可以在给定这样的框架的情况下构建调用堆栈。
这对于调试死锁最有用:这个函数不需要死锁线程的合作,只要它们保持死锁,这些线程的调用堆栈就会被冻结。 在调用代码检查帧时,为非死锁线程返回的帧可能与该线程的当前活动无关。
此功能应仅用于内部和专门用途。
2.5 版中的新功能。
- sys.dllhandle
- 指定 Python DLL 句柄的整数。 可用性:Windows。
- sys.displayhook(value)
如果value不是
None
,则该函数将其打印到sys.stdout
,并保存在__builtin__._
中。sys.displayhook
在计算交互式 Python 会话中输入的 表达式 的结果时调用。 这些值的显示可以通过将另一个单参数函数分配给sys.displayhook
来自定义。
- sys.dont_write_bytecode
如果这是真的,Python 将不会尝试在源模块的导入上写入
.pyc
或.pyo
文件。 此值最初设置为True
或False
,具体取决于 -B 命令行选项和 PYTHONDONTWRITEBYTECODE 环境变量,但你可以自己设置它来控制字节码文件的生成。2.6 版中的新功能。
- sys.excepthook(type, value, traceback)
此函数将给定的回溯和异常打印到
sys.stderr
。当异常被引发并未被捕获时,解释器使用三个参数调用
sys.excepthook
,异常类、异常实例和回溯对象。 在交互式会话中,这发生在控制返回到提示之前; 在 Python 程序中,这发生在程序退出之前。 可以通过将另一个三参数函数分配给sys.excepthook
来自定义此类顶级异常的处理。
- sys.__displayhook__
sys.__excepthook__
- 这些对象包含程序开始时
displayhook
和excepthook
的原始值。 它们被保存,以便displayhook
和excepthook
可以在它们碰巧被损坏的对象替换时恢复。
- sys.exc_info()
此函数返回一个包含三个值的元组,这些值提供有关当前正在处理的异常的信息。 返回的信息特定于当前线程和当前堆栈帧。 如果当前堆栈帧未处理异常,则从调用堆栈帧或其调用者中获取信息,依此类推,直到找到正在处理异常的堆栈帧。 这里,“处理异常”被定义为“执行或已经执行了一个except子句”。 对于任何堆栈帧,只能访问有关最近处理的异常的信息。
如果堆栈上的任何地方都没有处理异常,则返回一个包含三个
None
值的元组。 否则,返回的值为(type, value, traceback)
。 它们的含义是: type 获取正在处理的异常的异常类型(一个类对象); value 获取异常参数(它的 关联值 或 raise 的第二个参数,如果异常类型是类对象,它总是一个类实例); traceback 获取一个回溯对象(参见参考手册),它封装了最初发生异常的点的调用堆栈。如果调用 exc_clear(),该函数将返回三个
None
值,直到当前线程中引发另一个异常或执行堆栈返回到正在处理另一个异常的帧。警告
将 traceback 返回值分配给正在处理异常的函数中的局部变量将导致循环引用。 这将防止同一函数中的局部变量或回溯引用的任何内容被垃圾收集。 由于大多数函数不需要访问回溯,最好的解决方案是使用
exctype, value = sys.exc_info()[:2]
之类的东西来仅提取异常类型和值。 如果您确实需要回溯,请确保在使用后将其删除(最好使用 try ... finally 语句)或调用 exc_info()本身不处理异常的函数。笔记
从 Python 2.2 开始,当启用垃圾收集并且它们变得无法访问时,这些循环会自动回收,但避免创建循环仍然更有效。
- sys.exc_clear()
此函数清除与当前线程中发生的当前或最后一个异常相关的所有信息。 调用此函数后,exc_info() 将返回三个
None
值,直到当前线程中引发另一个异常或执行堆栈返回到正在处理另一个异常的帧。此功能仅在少数模糊情况下才需要。 这些包括报告有关最后或当前异常的信息的日志记录和错误处理系统。 此函数还可用于尝试释放资源并触发对象终结,但不保证将释放哪些对象(如果有)。
2.3 版中的新功能。
- sys.exc_type
sys.exc_value
sys.exc_traceback 自 1.5 版起已弃用: 改用 exc_info()。
由于它们是全局变量,它们不特定于当前线程,因此在多线程程序中使用它们是不安全的。 当没有异常处理时,
exc_type
设置为None
,其他两个未定义。
- sys.exec_prefix
- 一个字符串,给出安装依赖于平台的 Python 文件的站点特定目录前缀; 默认情况下,这也是
'/usr/local'
。 这可以在构建时使用 configure 脚本的--exec-prefix
参数进行设置。 具体来说,所有配置文件(例如pyconfig.h
头文件)安装在exec_prefix/lib/pythonX.Y/config
目录,共享库模块安装在exec_prefix/lib/pythonX.Y/lib-dynload
,其中XY为Python版本号,例如2.7
。
- sys.executable
- 在有意义的系统上,给出 Python 解释器的可执行二进制文件的绝对路径的字符串。 如果 Python 无法检索其可执行文件的真实路径,则 sys.executable 将是一个空字符串或
None
。
- sys.exit([arg])
退出 Python。 这是通过引发
SystemExit
异常来实现的,因此由 try 语句的 finally 子句指定的清理操作得到遵守,并且可以在外部级别拦截退出尝试。可选参数 arg 可以是一个整数,给出退出状态(默认为零)或其他类型的对象。 如果它是一个整数,零被认为是“成功终止”,任何非零值都被壳等认为是“异常终止”。 大多数系统要求它在 0-127 的范围内,否则会产生未定义的结果。 一些系统有为特定退出代码分配特定含义的约定,但这些通常不完善; Unix 程序通常使用 2 表示命令行语法错误,使用 1 表示所有其他类型的错误。 如果传递了另一种类型的对象,则
None
等效于传递零,任何其他对象都会打印到 stderr 并导致退出代码为 1。 特别是,sys.exit("some error message")
是一种在发生错误时退出程序的快捷方式。由于exit()最终“只”抛出异常,所以只有从主线程调用时才会退出进程,不会拦截异常。
- sys.exitfunc
这个值实际上不是由模块定义的,但可以由用户(或由程序)设置以指定程序退出时的清理操作。 设置后,它应该是一个无参数的函数。 这个函数会在解释器退出时被调用。 这种方式只能安装一个功能; 要允许在终止时调用多个函数,请使用 atexit 模块。
笔记
当程序被信号杀死、检测到 Python 致命内部错误或调用
os._exit()
时,不会调用 exit 函数。自 2.4 版起已弃用: 改用 atexit。
- sys.flags
结构序列 flags 公开命令行标志的状态。 属性是只读的。
属性
旗帜
debug
py3k_warning
division_warning
division_new
interactive
optimize
no_user_site
no_site
ignore_environment
tabcheck
verbose
bytes_warning
hash_randomization
2.6 版中的新功能。
2.7.3 新功能:
hash_randomization
属性。
- sys.float_info
一个 structseq 保存有关浮点类型的信息。 它包含有关精度和内部表示的低级信息。 这些值对应于“C”编程语言的标准头文件
float.h
中定义的各种浮点常量; 有关详细信息,请参阅 1999 ISO/IEC C 标准 [C99] 的第 5.2.4.2.2 节“浮动类型的特征”。属性
float.h 宏
解释
epsilon
DBL_EPSILON
1 与可表示为浮点数的大于 1 的最小值之间的差值
dig
DBL_DIG
可以在浮点数中忠实表示的最大十进制位数; 见下文
mant_dig
DBL_MANT_DIG
浮点精度:浮点数有效数中基数为
radix
的位数DBL_MAX
最大可表示的有限浮点数
max_exp
DBL_MAX_EXP
最大整数 e 使得
radix**(e-1)
是可表示的有限浮点数max_10_exp
DBL_MAX_10_EXP
使
10**e
在可表示的有限浮点数范围内的最大整数 eDBL_MIN
最小正标准化浮动
min_exp
DBL_MIN_EXP
最小整数 e 使得
radix**(e-1)
是归一化浮点数min_10_exp
DBL_MIN_10_EXP
最小整数 e 使得
10**e
是归一化浮点数radix
FLT_RADIX
指数表示的基数
rounds
FLT_ROUNDS
表示用于算术运算的舍入模式的整数常量。 这反映了解释器启动时系统 FLT_ROUNDS 宏的值。 有关可能值及其含义的解释,请参见 C99 标准的第 5.2.4.2.2 节。
属性
sys.float_info.dig
需要进一步解释。 如果s
是表示最多具有sys.float_info.dig
位有效数字的十进制数的任何字符串,则将s
转换为浮点数并再次返回将恢复表示相同十进制值的字符串:>>> import sys >>> sys.float_info.dig 15 >>> s = '3.14159265358979' # decimal string with 15 significant digits >>> format(float(s), '.15g') # convert to float and back -> same value '3.14159265358979'
但是对于超过
sys.float_info.dig
有效数字的字符串,这并不总是正确的:>>> s = '9876543211234567' # 16 significant digits is too many! >>> format(float(s), '.16g') # conversion changes value '9876543211234568'
2.6 版中的新功能。
- sys.float_repr_style
指示 repr() 函数对浮点数的行为方式的字符串。 如果字符串具有值
'short'
,那么对于有限浮点数x
,repr(x)
旨在生成具有float(repr(x)) == x
属性的短字符串。 这是 Python 2.7 及更高版本中的常见行为。 否则,float_repr_style
的值为'legacy'
并且repr(x)
的行为方式与它在 2.7 之前的 Python 版本中的行为方式相同。2.7 版中的新功能。
- sys.getcheckinterval()
返回解释器的“检查间隔”; 参见 setcheckinterval()。
2.3 版中的新功能。
- sys.getdefaultencoding()
返回 Unicode 实现使用的当前默认字符串编码的名称。
2.0 版中的新功能。
- sys.getdlopenflags()
返回用于
dlopen()
调用的标志的当前值。 标志常量在 dl 和DLFCN
模块中定义。 可用性:Unix。2.2 版中的新功能。
- sys.getfilesystemencoding()
返回用于将 Unicode 文件名转换为系统文件名的编码名称,如果使用系统默认编码,则返回
None
。 结果值取决于操作系统:在 Mac OS X 上,编码为
'utf-8'
。在 Unix 上,根据 nl_langinfo(CODESET) 的结果,编码是用户的偏好,如果
nl_langinfo(CODESET)
失败,则编码为None
。在 Windows NT+ 上,文件名本机是 Unicode,因此不执行转换。 getfilesystemencoding() 仍然返回
'mbcs'
,因为这是应用程序在明确希望将 Unicode 字符串转换为用作文件名时等效的字节字符串时应使用的编码。在 Windows 9x 上,编码为
'mbcs'
。
2.3 版中的新功能。
- sys.getrefcount(object)
- 返回 对象 的引用计数。 返回的计数通常比您预期的要高 1,因为它包含(临时)引用作为 getrefcount() 的参数。
- sys.getrecursionlimit()
- 返回递归限制的当前值,Python解释器堆栈的最大深度。 此限制可防止无限递归导致 C 堆栈溢出和 Python 崩溃。 可以通过 setrecursionlimit() 设置。
- sys.getsizeof(object[, default])
以字节为单位返回对象的大小。 对象可以是任何类型的对象。 所有内置对象都将返回正确的结果,但对于第三方扩展,这不一定适用,因为它是特定于实现的。
如果给定,如果对象不提供检索大小的方法,则将返回 default。 否则会引发
TypeError
。getsizeof() 调用对象的
__sizeof__
方法,如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销。2.6 版中的新功能。
- sys._getframe([depth])
- 从调用堆栈返回一个框架对象。 如果给定了可选整数 depth,则返回在堆栈顶部以下调用多次的框架对象。 如果这比调用堆栈更深,则会引发
ValueError
。 depth 的默认值为零,返回调用堆栈顶部的帧。
- sys.getprofile()
获取由 setprofile() 设置的分析器函数。
2.6 版中的新功能。
- sys.gettrace()
获取由 settrace() 设置的跟踪函数。
2.6 版中的新功能。
- sys.getwindowsversion()
返回描述当前运行的 Windows 版本的命名元组。 命名元素为 major、minor、build、platform、service_pack、service_pack_minor[X13X] ]、service_pack_major、suite_mask和product_type。 service_pack 包含一个字符串,而所有其他值都是整数。 组件也可以通过名称访问,因此
sys.getwindowsversion()[0]
等价于sys.getwindowsversion().major
。 为了与以前的版本兼容,只能通过索引检索前 5 个元素。platform 可以是以下值之一:
持续的
平台
0 (VER_PLATFORM_WIN32s)
Windows 3.1 上的 Win32s
1 (VER_PLATFORM_WIN32_WINDOWS)
视窗 95/98/ME
2 (VER_PLATFORM_WIN32_NT)
视窗 NT/2000/XP/x64
3 (VER_PLATFORM_WIN32_CE)
视窗CE
product_type 可以是以下值之一:
持续的
意义
1 (VER_NT_WORKSTATION)
该系统是一个工作站。
2 (VER_NT_DOMAIN_CONTROLLER)
该系统是一个域控制器。
3 (VER_NT_SERVER)
系统是服务器,但不是域控制器。
该函数封装了Win32
GetVersionEx()
函数; 有关这些字段的更多信息,请参阅关于OSVERSIONINFOEX()
的 Microsoft 文档。可用性:Windows。
2.3 版中的新功能。
2.7 版本变更: 更改为命名元组并添加 service_pack_minor、service_pack_major、suite_mask 和 .
- sys.hexversion
编码为单个整数的版本号。 这保证会随着每个版本的增加而增加,包括对非生产版本的适当支持。 例如,要测试 Python 解释器是否至少为 1.5.2 版,请使用:
if sys.hexversion >= 0x010502F0: # use some advanced feature ... else: # use an alternative implementation or warn the user ...
这被称为
hexversion
,因为它只有在将其传递给内置 hex() 函数的结果时才看起来真正有意义。version_info
值可用于对相同信息进行更人性化的编码。hexversion
是一个 32 位数字,布局如下:位(大端顺序)
意义
1-8
PY_MAJOR_VERSION
(2.1.0a3
中的2
)9-16
PY_MINOR_VERSION
(2.1.0a3
中的1
)17-24
PY_MICRO_VERSION
(2.1.0a3
中的0
)25-28
PY_RELEASE_LEVEL
(0xA
为 alpha,0xB
为测试版,0xC
为候选版本,0xF
为最终版本)29-32
PY_RELEASE_SERIAL
(2.1.0a3
中的3
,最终版本为零)因此
2.1.0a3
是十六进制0x020100a3
。1.5.2 版中的新功能。
- sys.long_info
一个结构序列,其中包含有关 Python 内部整数表示的信息。 属性是只读的。
属性
解释
bits_per_digit
每个数字中保存的位数。 Python 整数内部存储在基数
2**long_info.bits_per_digit
中sizeof_digit
用于表示数字的 C 类型的大小(以字节为单位)
2.7 版中的新功能。
- sys.last_type
sys.last_value
sys.last_traceback 这三个变量并不总是被定义; 它们在未处理异常并且解释器打印错误消息和堆栈回溯时设置。 它们的预期用途是允许交互式用户导入调试器模块并进行事后调试,而无需重新执行导致错误的命令。 (通常使用
import pdb; pdb.pm()
进入事后调试器;有关详细信息,请参阅 pdb — Python 调试器 一章。)变量的含义与上面exc_info()的返回值相同。 (因为只有一个交互线程,线程安全不是这些变量的问题,不像
exc_type
等)
- sys.maxint
- Python 的常规整数类型支持的最大正整数。 这至少是 2**31-1。 最大的负整数是
-maxint-1
— 不对称性源于使用 2 的补码二进制算法。
- sys.maxsize
- 平台的 Py_ssize_t 类型支持的最大正整数,因此列表、字符串、字典和许多其他容器可以拥有的最大大小。
- sys.maxunicode
- 一个整数,给出 Unicode 字符的最大支持代码点。 此值取决于指定 Unicode 字符是存储为 UCS-2 还是 UCS-4 的配置选项。
- sys.meta_path
finder 对象的列表,这些对象的
find_module()
方法被调用以查看其中一个对象是否可以找到要导入的模块。find_module()
方法至少使用被导入模块的绝对名称来调用。 如果要导入的模块包含在包中,则父包的__path__
属性作为第二个参数传入。 如果找不到模块,该方法返回None
,否则返回 loader。sys.meta_path 在任何隐式默认查找器或 sys.path 之前搜索。
有关原始规范,请参阅 PEP 302。
- sys.modules
- 这是一个将模块名称映射到已加载模块的字典。 这可以被操纵以强制重新加载模块和其他技巧。 请注意,从此字典中删除模块 不是 与在相应的模块对象上调用 reload() 相同。
- sys.path
指定模块搜索路径的字符串列表。 从环境变量 PYTHONPATH 初始化,加上依赖于安装的默认值。
在程序启动时初始化,此列表的第一项
path[0]
是包含用于调用 Python 解释器的脚本的目录。 如果脚本目录不可用(例如 如果解释器是交互式调用的,或者脚本是从标准输入中读取的),则path[0]
是空字符串,它指示 Python 首先搜索当前目录中的模块。 请注意,脚本目录插入 之前 作为 PYTHONPATH 的结果插入的条目。程序可以出于自己的目的自由修改此列表。
2.3 版更改:Unicode 字符串不再被忽略。
- sys.path_hooks
接受路径参数以尝试为路径创建 finder 的可调用列表。 如果可以创建一个 finder,它将由可调用对象返回,否则引发
ImportError
。最初在 PEP 302 中指定。
- sys.path_importer_cache
作为 finder 对象缓存的字典。 键是传递给 sys.path_hooks 的路径,值是找到的查找器。 如果路径是有效的文件系统路径,但在 sys.path_hooks 上未找到显式查找器,则存储
None
以表示应使用隐式默认查找器。 如果路径不是现有路径,则设置 imp.NullImporter。最初在 PEP 302 中指定。
- sys.platform
例如,此字符串包含可用于将特定于平台的组件附加到 sys.path 的平台标识符。
对于大多数 Unix 系统,这是
uname -s
返回的小写操作系统名称,并附加uname -r
返回的版本的第一部分,例如'sunos5'
,在构建Python时。 除非您想测试特定的系统版本,否则建议使用以下习语:if sys.platform.startswith('freebsd'): # FreeBSD-specific code here... elif sys.platform.startswith('linux'): # Linux-specific code here...
2.7.3版本变化:由于
sys.platform == 'linux2'
的代码检查很多,而且Linux 2.x和3.x之间没有本质的变化,所以sys.platform
一直是设置为'linux2'
,即使在 Linux 3.x 上也是如此。 在 Python 3.3 及更高版本中,该值将始终设置为'linux'
,因此建议始终使用上述startswith
习语。对于其他系统,这些值是:
系统
平台值
Linux (2.x 和 3.x)
'linux2'
视窗
'win32'
Windows/Cygwin
'cygwin'
Mac OS X
'darwin'
操作系统/2
'os2'
操作系统/2 EMX
'os2emx'
操作系统
'riscos'
操作系统
'atheos'
- sys.prefix
- 一个字符串,给出安装平台无关 Python 文件的站点特定目录前缀; 默认情况下,这是字符串
'/usr/local'
。 这可以在构建时使用 configure 脚本的--prefix
参数进行设置。 Python 库模块的主要集合安装在目录prefix/lib/pythonX.Y
中,而平台无关的头文件(除pyconfig.h
外的所有)存储在prefix/include/pythonX.Y
中,其中 XY[ X191X]是Python的版本号,例如2.7
。
- sys.ps1
sys.ps2
- 指定解释器的主要和次要提示的字符串。 这些仅在解释器处于交互模式时才定义。 在这种情况下,它们的初始值是
'>>> '
和'... '
。 如果将非字符串对象分配给任一变量,则每次解释器准备读取新的交互式命令时,都会重新评估其 str(); 这可用于实现动态提示。
- sys.py3kwarning
包含 Python 3 警告标志状态的布尔值。 当 Python 以 -3 选项启动时,它是
True
。 (这应该被视为只读;将其设置为不同的值不会影响 Python 3 警告。)2.6 版中的新功能。
- sys.setcheckinterval(interval)
- 设置解释器的“检查间隔”。 这个整数值决定了解释器检查周期性事物(例如线程切换和信号处理程序)的频率。 默认值为
100
,表示每 100 条 Python 虚拟指令执行一次检查。 将其设置为更大的值可能会提高使用线程的程序的性能。 将其设置为值<=
0 会检查每个虚拟指令,从而最大限度地提高响应速度和开销。
- sys.setdefaultencoding(name)
设置 Unicode 实现使用的当前默认字符串编码。 如果 name 与任何可用编码不匹配,则引发
LookupError
。 此函数仅供 site 模块实现使用,并在需要时由sitecustomize
使用。 一旦被 site 模块使用,它就会从 sys 模块的命名空间中删除。2.0 版中的新功能。
- sys.setdlopenflags(n)
设置解释器用于
dlopen()
调用的标志,例如当解释器加载扩展模块时。 除此之外,这将在导入模块时启用符号的延迟解析,如果调用为sys.setdlopenflags(0)
。 要在扩展模块之间共享符号,请调用sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL)
。 标志模块的符号名称可以在 dl 模块或DLFCN
模块中找到。 如果DLFCN
不可用,可以使用 h2py 脚本从/usr/include/dlfcn.h
生成。 可用性:Unix。2.2 版中的新功能。
- sys.setprofile(profilefunc)
设置系统的profile函数,可以在Python中实现一个Python源码分析器。 有关 Python 探查器的更多信息,请参阅 一章 Python 探查器 。 系统的配置文件函数的调用方式与系统的跟踪函数类似(参见 settrace()),但它是用不同的事件调用的,例如它不会为每个执行的代码行调用(仅在调用时调用)并返回,但即使设置了异常也会报告返回事件)。 该函数是特定于线程的,但是分析器无法知道线程之间的上下文切换,因此在存在多个线程的情况下使用它没有意义。 另外,它的返回值没有被使用,所以它可以简单地返回
None
。配置文件函数应具有三个参数:frame、event 和 arg。 frame 是当前堆栈帧。 event 是一个字符串:
'call'
、'return'
、'c_call'
、'c_return'
或'c_exception'
。 arg 取决于事件类型。这些事件具有以下含义:
'call'
调用了一个函数(或输入了一些其他代码块)。 profile 函数被调用; arg 是
None
。'return'
一个函数(或其他代码块)即将返回。 profile 函数被调用; arg 是将返回的值,如果事件是由引发的异常引起的,则为
None
。'c_call'
AC 函数即将被调用。 这可能是扩展功能或内置功能。 arg 是 C 函数对象。
'c_return'
AC 功能已返回。 arg 是 C 函数对象。
'c_exception'
AC 函数引发了异常。 arg 是 C 函数对象。
- sys.setrecursionlimit(limit)
将 Python 解释器堆栈的最大深度设置为 limit。 此限制可防止无限递归导致 C 堆栈溢出和 Python 崩溃。
可能的最高限制取决于平台。 当用户有需要深度递归的程序和支持更高限制的平台时,她可能需要将限制设置得更高。 这应该小心完成,因为过高的限制会导致崩溃。
- sys.settrace(tracefunc)
设置系统的trace功能,可以在Python中实现一个Python源码调试器。 该函数是线程特定的; 对于支持多线程的调试器,必须使用 settrace() 为每个被调试的线程注册。
跟踪函数应具有三个参数:frame、event 和 arg。 frame 是当前堆栈帧。 event 是一个字符串:
'call'
、'line'
、'return'
或'exception'
。 arg 取决于事件类型。每当进入新的本地范围时,都会调用跟踪函数(将 event 设置为
'call'
); 它应该返回对要使用该范围的本地跟踪函数的引用,或者如果不应跟踪该范围,则返回None
。本地跟踪函数应该返回对自身(或另一个函数以在该范围内进一步跟踪)的引用,或
None
以关闭该范围内的跟踪。这些事件具有以下含义:
'call'
调用了一个函数(或输入了一些其他代码块)。 调用全局跟踪函数; arg 是
None
; 返回值指定本地跟踪函数。'line'
解释器即将执行新的代码行或重新执行循环的条件。 调用本地跟踪函数; arg 为
None
; 返回值指定新的本地跟踪函数。 有关其工作原理的详细说明,请参阅Objects/lnotab_notes.txt
。'return'
一个函数(或其他代码块)即将返回。 调用本地跟踪函数; arg 是将返回的值,如果事件是由引发的异常引起的,则为
None
。 跟踪函数的返回值被忽略。'exception'
发生了异常。 调用本地跟踪函数; arg 是一个元组
(exception, value, traceback)
; 返回值指定新的本地跟踪函数。
请注意,当异常沿调用者链向下传播时,会在每个级别生成
'exception'
事件。有关代码和框架对象的更多信息,请参阅 标准类型层次结构 。
- sys.settscdump(on_flag)
如果 on_flag 为真,则使用 Pentium 时间戳计数器激活 VM 测量的转储。 如果 on_flag 关闭,则停用这些转储。 该函数仅在 Python 使用
--with-tsc
编译时可用。 要了解此转储的输出,请阅读 Python 源代码中的Python/ceval.c
。2.4 版中的新功能。
- sys.stdin
sys.stdout
sys.stderr
- 与解释器的标准输入、输出和错误流相对应的文件对象。
stdin
用于除脚本之外的所有解释器输入,但包括对 input() 和 raw_input() 的调用。stdout
用于 print 和 expression 语句的输出以及 input() 和 raw_input()[ X145X]。 解释器自己的提示和(几乎所有)它的错误消息转到stderr
。stdout
和stderr
不需要是内置文件对象:任何对象都是可以接受的,只要它有一个接受字符串参数的write()
方法。 (更改这些对象不会影响由 os.popen()、os.system() 或exec*()
系列执行的进程的标准 I/O 流os 模块中的函数。)
- sys.__stdin__
sys.__stdout__
sys.__stderr__ 这些对象包含程序开始时
stdin
、stderr
和stdout
的原始值。 它们在完成期间使用,无论sys.std*
对象是否已重定向,都可以用于打印到实际的标准流。它还可以用于将实际文件恢复到已知的工作文件对象,以防它们被损坏的对象覆盖。 但是,执行此操作的首选方法是在替换之前显式保存先前的流,并恢复保存的对象。
- sys.subversion
表示 Python 解释器的 Subversion 信息的三元组(repo、branch、version)。 repo 是存储库的名称,
'CPython'
。 branch 是'trunk'
、'branches/name'
或'tags/name'
形式之一的字符串。 version 是svnversion
的输出,如果解释器是从 Subversion checkout 构建的; 如果有本地修改,它包含修订号(范围)和可能的尾随“M”。 如果树被导出(或 svnversion 不可用),如果分支是标签,则它是Include/patchlevel.h
的修订版。 否则为None
。2.5 版中的新功能。
笔记
Python 现在使用 Git 开发 。 在最近的 Python 2.7 错误修复版本中,subversion 因此包含占位符信息。 它在 Python 3.3 中被删除。
- sys.tracebacklimit
- 当此变量设置为整数值时,它确定发生未处理的异常时打印的回溯信息的最大级别数。 默认值为
1000
。 当设置为0
或更少时,所有回溯信息都被抑制,只打印异常类型和值。
- sys.version
- 一个字符串,其中包含 Python 解释器的版本号以及有关所用版本号和编译器的附加信息。 该字符串在交互式解释器启动时显示。 不要从中提取版本信息,而是使用 version_info 和 platform 模块提供的功能。
- sys.api_version
此解释器的 C API 版本。 程序员在调试 Python 和扩展模块之间的版本冲突时可能会发现这很有用。
2.3 版中的新功能。
- sys.version_info
包含版本号五个组成部分的元组:major、minor、micro、releaselevel和serial ]。 除 releaselevel 之外的所有值都是整数; 发布级别为
'alpha'
、'beta'
、'candidate'
或'final'
。 Python 2.0版本对应的version_info
值为(2, 0, 0, 'final', 0)
。 组件也可以通过名称访问,所以sys.version_info[0]
等价于sys.version_info.major
等等。2.0 版中的新功能。
2.7 版变更: 添加命名组件属性
- sys.warnoptions
- 这是警告框架的实现细节; 不要修改这个值。 有关警告框架的更多信息,请参阅 warnings 模块。
- sys.winver
- 用于在 Windows 平台上形成注册表项的版本号。 这在 Python DLL 中存储为字符串资源 1000。 该值通常是 version 的前三个字符。 它在 sys 模块中提供,用于提供信息; 修改此值对 Python 使用的注册表项没有影响。 可用性:Windows。
引文
- C99
- ISO/IEC 9899:1999。 “编程语言——C。” 该标准的公开草案可从 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 获得。