28.1. sys —系统特定的参数和Function

该模块提供对解释器使用或维护的某些变量以及与解释器强烈交互的Function的访问。它始终可用。

  • sys. argv
    • 传递给 Python 脚本的命令行参数列表。 argv[0]是脚本名称(是否为完整路径名取决于 os)。如果使用解释器的-c命令行选项执行了命令,则argv[0]设置为字符串'-c'。如果没有脚本名称传递给 Python 解释器,则argv[0]是空字符串。

要遍历标准 Importing 或命令行上给出的文件列表,请参阅fileinput模块。

  • sys. byteorder
    • 本机字节 Sequences 的指示符。在 big-endian(最高有效字节在前)平台上,该值将为'big',在 little-endian(最低有效字节在前)平台上的值为'little'

2.0 版中的新Function。

  • sys. builtin_module_names

    • 字符串的 Tuples,给出了编译到此 Python 解释器中的所有模块的名称。 (此信息无法pass其他任何方式获得,modules.keys()仅列出了导入的模块.)
  • sys. call_tracing(* func args *)

    • 启用跟踪时,请致电func(*args)。跟踪状态已保存,然后恢复。它旨在从检查点的调试器中调用,以递归方式调试其他一些代码。
  • sys. copyright

    • 一个字符串,其中包含与 Python 解释器有关的版权。
  • sys. _clear_type_cache ( )

    • 清除内部类型缓存。类型缓存用于加速属性和方法的查找。使用* only *函数在引用泄漏调试期间删除不必要的引用。

此Function应仅用于内部和专用目的。

2.6 版的新Function。

  • sys. _current_frames ( )
    • 返回一个字典,该字典将每个线程的标识符 Map 到调用该函数时该线程中当前活动的最顶层堆栈帧。请注意,traceback模块中的函数可以在给定这样的框架的情况下构建调用堆栈。

这对于调试死锁最有用:此函数不需要死锁线程的配合,并且只要这些线程的调用堆栈保持死锁状态,它们就会被冻结。在调用代码检查帧时,为非死锁线程返回的框架可能与该线程的当前活动没有任何关系。

此Function应仅用于内部和专用目的。

2.5 版的新Function。

  • sys. dllhandle

    • 指定 Python DLL 句柄的整数。可用性:Windows。
  • sys. displayhook(* value *)

    • 如果* value *不是None,则此函数将其打印到sys.stdout,并将其保存在__builtin__._中。

评估在交互式 Python 会话中 Importing 的expression的结果将调用sys.displayhook。这些值的显示可以pass向sys.displayhook分配另一个单参数函数来定制。

  • sys. dont_write_bytecode
    • 如果是这样,Python 将不会try在导入源模块时写入.pyc.pyo文件。根据-B命令行选项和 PYTHONDONTWRITEBYTECODE环境变量,此值最初设置为TrueFalse,但是您可以自己设置以控制字节码文件的生成。

2.6 版的新Function。

  • sys. excepthook(* type value traceback *)
    • 此函数将给定的 traceback 和异常打印到sys.stderr

当引发并捕获异常时,解释器将调用带有三个参数的sys.excepthook,异常类,异常实例和回溯对象。在交互式会话中,这恰好在控制权返回到提示之前发生。在 Python 程序中,这恰好在程序退出之前发生。可以pass为sys.excepthook分配另一个三参数函数来定制此类顶级异常的处理。

  • sys. __displayhook__

  • sys. __excepthook__

    • 这些对象在程序开始时包含displayhookexcepthook的原始值。将它们保存起来,以便在碰巧被损坏的对象替换时可以恢复displayhookexcepthook
  • sys. exc_info ( )

    • 此函数返回三个值的 Tuples,它们给出有关当前正在处理的异常的信息。返回的信息特定于当前线程和当前堆栈帧。如果当前堆栈帧未处理异常,则从调用堆栈帧或其调用者等获取信息,依此类推,直到找到处理异常的堆栈帧为止。这里,“处理异常”被定义为“执行或已经执行了 except 子句”。对于任何堆栈帧,只能访问有关最近处理的异常的信息。

如果堆栈上的任何地方都没有异常处理,则返回包含三个None值的 Tuples。否则,返回的值为(type, value, traceback)。它们的含义是:* type 获取正在处理的异常的异常类型(一个类对象); * value 获取异常参数(其关联值raise的第二个参数,如果异常类型为类对象,则该参数始终为类实例); * traceback *获取一个回溯对象(请参见参考手册),该对象在最初发生异常的位置封装了调用堆栈。

如果调用exc_clear(),则此函数将返回三个None值,直到在当前线程中引发另一个异常或执行堆栈返回到正在处理另一个异常的帧为止。

Warning

在处理异常的函数中将* traceback *返回值分配给局部变量将导致循环引用。这将防止垃圾回收由同一函数中的局部变量或回溯引用的任何内容。由于大多数函数不需要访问 traceback,因此最好的解决方案是使用exctype, value = sys.exc_info()[:2]之类的东西来仅提取异常类型和值。如果确实需要回溯,请确保在使用后将其删除(最好使用tryfinally语句完成)或在本身不处理异常的函数中调用exc_info()

Note

从 Python 2.2 开始,启用垃圾回收并且无法访问时,会自动回收此类循环,但是避免创建循环仍然更加有效。

  • sys. exc_clear ( )
    • 该函数清除与当前线程中发生的当前或最后一个异常有关的所有信息。调用此函数后,exc_info()将返回三个None值,直到当前线程中引发另一个异常,或者执行堆栈返回到正在处理另一个异常的帧。

仅在少数情况下才需要此Function。这些包括日志记录和错误处理系统,这些系统报告有关上一个或当前异常的信息。此Function也可用于try释放资源并触发对象完成,尽管无法保证将释放哪些对象(如果有)。

2.3 版的新Function。

  • 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中,其中* X.Y *是 Python 的版本号,例如2.7
  • sys. executable

    • 一个字符串,给出有意义的系统上 Python 解释器的可执行二进制文件的绝对路径。如果 Python 无法检索其可执行文件的真实路径,则sys.executable将为空字符串或None
  • sys. exit([* arg *])

    • 从 Python 退出。这是pass引发SystemExit异常来实现的,因此可以接受try语句的 finally 子句指定的清除操作,并且有可能在外部级别拦截 Export try。

可选参数* arg *可以是给出退出状态的整数(默认为零),也可以是其他类型的对象。如果它是整数,则 Shell 等将零视为“成功终止”,而将任何非零值视为“异常终止”。大多数系统要求它的范围是 0–127,否则会产生不确定的结果。某些系统具有为特定的退出代码分配特定含义的约定,但是这些通常不完善。 Unix 程序通常将 2 用于命令行语法错误,将 1 用于所有其他类型的错误。如果传递了另一种类型的对象,则None等效于传递零,并且将任何其他对象输出到stderr并导致退出代码为 1.特别是,sys.exit("some error message")是发生错误时退出程序的快速方法。

由于exit()finally“仅”引发异常,因此它仅在从主线程调用时才退出进程,并且不会拦截该异常。

  • sys. exitfunc
    • 该值实际上不是由模块定义的,但是可以由用户(或由程序)设置以在程序退出时指定清除操作。设置后,它应该是无参数函数。解释器退出时将调用此函数。这样只能安装一个Function。要允许在终止时调用多种Function,请使用atexit模块。

Note

当程序被 signal 杀死,检测到 Python 致命内部错误或调用os._exit()时,不会调用 exit 函数。

从版本 2.4 开始不推荐使用:改为使用atexit

  • sys. flags
    • 结构序列* flags *公开命令行标志的状态。这些属性是只读的。
attributeflag
debug-d
py3k_warning-3
division_warning-Q
division_new-Qnew
inspect-i
interactive-i
optimize-O-OO
dont_write_bytecode-B
no_user_site-s
no_site-S
ignore_environment-E
tabcheck-t-tt
verbose-v
unicode-U
bytes_warning-b
hash_randomization-R

2.6 版的新Function。

版本 2.7.3 中的新Function:hash_randomization属性。

  • sys. float_info
    • structseq 保存有关浮点类型的信息。它包含有关精度和内部表示的低级信息。这些值对应于在标准头文件float.h中为“ C”编程语言定义的各种浮点常量;有关详细信息,请参见 1999 ISO/IEC C 标准[C99]的 5.2.4.2.2 节“浮点类型的特性”。
attributefloat.h macroexplanation
epsilonDBL_EPSILON1 与可表示为浮点数的最小值之间的差(大于 1)
digDBL_DIG浮点数中可以如实表示的最大十进制数字;见下文
mant_digDBL_MANT_DIG浮点数精度:浮点数有效位数的基数radix
maxDBL_MAX最大可表示有限浮点数
max_expDBL_MAX_EXP使得radix**(e-1)是可表示的有限浮点数的最大整数 e
max_10_expDBL_MAX_10_EXP使得10**e在可表示的有限浮点数范围内的最大整数 e
minDBL_MIN最小正归一化浮点数
min_expDBL_MIN_EXP最小整数 e,使得radix**(e-1)是规范化的浮点数
min_10_expDBL_MIN_10_EXP最小整数 e,使得10**e是规范化的浮点数
radixFLT_RADIX指数表示基数
roundsFLT_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 版的新Function。

  • sys. float_repr_style
    • 一个字符串,指示repr()函数对浮点数的行为。如果字符串的值是'short',那么对于有限浮点数xrepr(x)的目标是产生一个具有float(repr(x)) == x属性的短字符串。这是 Python 2.7 及更高版本中的常见行为。否则,float_repr_style的值为'legacy',并且repr(x)的行为与 2.7 之前的 Python 版本中的行为相同。

2.7 版的新Function。

  • sys. getcheckinterval ( )

2.3 版的新Function。

  • sys. getdefaultencoding ( )
    • 返回 Unicode 实现使用的当前默认字符串编码的名称。

2.0 版中的新Function。

  • sys. getdlopenflags ( )
    • 返回用于dlopen()调用的标志的当前值。标志常量在dlDLFCN模块中定义。可用性:Unix。

2.2 版中的新Function。

  • sys. getfilesystemencoding ( )

    • 返回用于将 Unicode 文件名转换为系统文件名的编码的名称;如果使用系统默认编码,则返回None。结果值取决于 os:
  • 在 Mac OS X 上,编码为'utf-8'

  • 在 Unix 上,根据 nl_langinfo(CODESET)的结果,编码是用户的首选项;如果nl_langinfo(CODESET)失败,则编码为None

  • 在 Windows NT 上,文件名本地为 Unicode,因此不执行任何转换。 getfilesystemencoding()仍返回'mbcs',因为这是应用程序在明确希望将 Unicode 字符串转换为与用作文件名时等效的字节字符串时应使用的编码。

  • 在 Windows 9x 上,编码为'mbcs'

2.3 版的新Function。

  • sys. getrefcount(* object *)

    • 返回* object *的引用计数。返回的计数通常比您预期的高一,因为它包含(临时)引用作为getrefcount()的参数。
  • sys. getrecursionlimit ( )

    • 返回递归限制的当前值,即 Python 解释器堆栈的最大深度。此限制可防止无限递归导致 C 堆栈溢出和 Python 崩溃。可以由setrecursionlimit()设置。
  • sys. getsizeof(* object * [,* default *])

    • 返回对象的大小(以字节为单位)。该对象可以是任何类型的对象。所有内置对象都将返回正确的结果,但是对于第三方扩展,这不一定成立,因为它是特定于实现的。

如果给定,如果对象不提供检索大小的方法,则将返回* default *。否则将引发TypeError

getsizeof()调用对象的__sizeof__方法,如果该对象由垃圾收集器 Management,则会增加额外的垃圾收集器开销。

2.6 版的新Function。

  • sys. _getframe([深度])
    • 从调用堆栈返回一个框架对象。如果给定了可选的整数* depth *,则返回在堆栈顶部下方多次调用的帧对象。如果那比调用堆栈深,则引发ValueError。 * depth *的默认值为零,返回调用堆栈顶部的帧。

CPython 实现细节: 此函数应仅用于内部和专用目的。不能保证它在所有 Python 实现中都存在。

  • sys. getprofile ( )

2.6 版的新Function。

  • sys. gettrace ( )

CPython 实现细节: gettrace()函数仅用于实现调试器,事件探查器,覆盖率工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能并非在所有 Python 实现中都可用。

2.6 版的新Function。

  • sys. getwindowsversion ( )
    • 返回描述当前运行的 Windows 版本的命名 Tuples。命名元素为* major minor build platform service_pack service_pack_minor service_pack_major suite_mask product_type *。 * service_pack *包含一个字符串,而所有其他值都是整数。也可以pass名称访问组件,因此sys.getwindowsversion()[0]等效于sys.getwindowsversion().major。为了与以前的版本兼容,只能pass索引检索前 5 个元素。
  • platform *可能是以下值之一:
ConstantPlatform
0 (VER_PLATFORM_WIN32s)Windows 3.1 上的 Win32s
1 (VER_PLATFORM_WIN32_WINDOWS)Windows 95/98/ME
2 (VER_PLATFORM_WIN32_NT)Windows NT/2000/XP/x64
3 (VER_PLATFORM_WIN32_CE)Windows CE
  • product_type *可能是以下值之一:
ConstantMeaning
1 (VER_NT_WORKSTATION)该系统是工作站。
2 (VER_NT_DOMAIN_CONTROLLER)该系统是域控制器。
3 (VER_NT_SERVER)系统是服务器,而不是域控制器。

此函数包装 Win32 GetVersionEx()函数;有关这些字段的更多信息,请参见OSVERSIONINFOEX()上的 Microsoft 文档。

Availability: Windows.

2.3 版的新Function。

在 2.7 版中进行了更改:更改为命名 Tuples,并添加了* service_pack_minor service_pack_major suite_mask product_type *。

  • 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 位数字:

位(大端 Sequences)Meaning
1-8PY_MAJOR_VERSION(2.1.0a3中的2)
9-16PY_MINOR_VERSION(2.1.0a3中的1)
17-24PY_MICRO_VERSION(2.1.0a3中的0)
25-28PY_RELEASE_LEVEL(对于 alpha 来说是0xA,对于 Beta 来说是0xB,对于候选发布者来说是0xC,对于finally版本来说是0xF)
29-32PY_RELEASE_SERIAL(2.1.0a3中的3,finally版本为零)

因此2.1.0a3是 hexversion 0x020100a3

版本 1.5.2 中的新Function。

  • sys. long_info
    • 一个结构序列,包含有关 Python 内部整数表示形式的信息。这些属性是只读的。
AttributeExplanation
bits_per_digit每个数字中保留的位数。 Python 整数内部存储在基本2**long_info.bits_per_digit
sizeof_digit用于表示数字的 C 类型的字节大小

2.7 版的新Function。

  • 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

    • 调用了find_module()方法的finder个对象的列表,以查看其中一个对象是否可以找到要导入的模块。至少使用要导入的模块的绝对名称调用find_module()方法。如果要导入的模块包含在包中,则将父包的__path__属性作为第二个参数传递。如果找不到模块,则该方法返回None,否则返回loader

在任何隐式默认查找器或sys.path之前搜索sys.meta_path

有关原始规范,请参见 PEP 302

  • sys. modules
    • 这是将模块名称 Map 到已经加载的模块的字典。可以对其进行操作以强制重新加载模块和其他技巧。请注意,从此词典中删除模块与在相应模块对象上调用reload()不同的
  • sys. path
    • 字符串列表,用于指定模块的搜索路径。从环境变量 PYTHONPATH初始化,再加上一个依赖于安装的默认值。

在程序启动时初始化,此列表的第一项path[0]是包含用于调用 Python 解释器的脚本的目录。如果脚本目录不可用(例如,如果交互式调用解释器或从标准 Importing 中读取脚本),则path[0]为空字符串,它将引导 Python 首先搜索当前目录中的模块。请注意,脚本目录是在 PYTHONPATH结果插入的条目之前*插入的。

程序可以出于自己的目的随意修改此列表。

在版本 2.3 中更改:不再忽略 Unicode 字符串。

See also

模块site介绍了如何使用.pth 文件扩展sys.path

  • sys. path_hooks
    • 带有路径参数以try为路径创建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返回的小写 os 名称,并附加了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 之间没有实质性的变化,因此即使在 Linux 3.x 上,sys.platform始终设置为'linux2'。在 Python 3.3 和更高版本中,该值将始终设置为'linux',因此建议始终使用上面介绍的startswith惯用语。

对于其他系统,值是:

Systemplatform value
Linux(2.x 3.x)'linux2'
Windows'win32'
Windows/Cygwin'cygwin'
Mac OS X'darwin'
OS/2'os2'
OS/2 EMX'os2emx'
RiscOS'riscos'
AtheOS'atheos'

See also

os.name的粒度较粗。 os.uname()提供与系统有关的版本信息。

platform模块提供对系统身份的详细检查。

  • sys. prefix

    • 一个字符串,提供特定于站点的目录前缀,在其中安装了平台无关的 Python 文件;默认情况下,这是字符串'/usr/local'。可以在构建时使用 configure 脚本的--prefix参数进行设置。 Python 库模块的主要集合安装在目录prefix/lib/pythonX.Y中,而平台无关的头文件(除pyconfig.h以外的所有文件)存储在prefix/include/pythonX.Y中,其中* X.Y *是 Python 的版本号,例如2.7
  • sys. ps1

  • sys. ps2

    • 指定解释器的主要和辅助提示的字符串。仅当解释器处于交互模式时才定义它们。在这种情况下,它们的初始值为'>>> ''... '。如果将非字符串对象分配给任何一个变量,则每次解释器准备读取新的交互式命令时,都会重新评估其str()。这可以用来实现动态提示。
  • sys. py3kwarning
    • 布尔值,包含 Python 3 警告标志的状态。使用-3 选项启动 Python 时为True。 (这应该被视为只读;将其设置为其他值不会对 Python 3 警告产生影响.)

2.6 版的新Function。

  • sys. setcheckinterval(* interval *)

    • 设置 Interpreter 的“检查间隔”。该整数值确定解释器多长时间检查一次周期性事件,例如线程切换和 signal 处理程序。默认值为100,这意味着每 100 条 Python 虚拟指令执行一次检查。将其设置为较大的值可能会提高使用线程的程序的性能。将其设置为值<=0 会检查每条虚拟指令,从而最大限度地提高响应速度和开销。
  • sys. setdefaultencoding(* name *)

    • 设置 Unicode 实现使用的当前默认字符串编码。如果* name *与任何可用的编码都不匹配,则引发LookupError。此Function仅打算由site模块实现使用,并且在需要时由sitecustomize使用。一旦由site模块使用,它将被从sys模块的命名空间中删除。

2.0 版中的新Function。

  • 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 版中的新Function。

  • sys. setprofile(* profilefunc *)
    • 设置系统的概要文件Function,该Function允许您在 Python 中实现 Python 源代码概要文件。有关 Python 分析器的更多信息,请参见第Python Profilers章。系统的配置文件函数的调用方式与系统的跟踪函数类似(请参见settrace()),但是它是pass不同的事件调用的,例如,并非针对每一行已执行的代码都调用它(仅在调用和返回时才调用,但 return 事件为即使设置了 exception 也会报告)。该函数是特定于线程的,但探查器无法了解线程之间的上下文切换,因此在存在多个线程的情况下使用此Function没有任何意义。同样,不使用其返回值,因此可以简单地返回None

概要文件函数应具有三个参数:* frame event arg *。 * frame *是当前堆栈帧。 * event *是一个字符串:'call''return''c_call''c_return''c_exception'。 * arg *取决于事件类型。

这些事件具有以下含义:

  • 'call'

    • 调用一个函数(或 Importing 其他代码块)。配置文件Function被调用; * arg *是None

    • 'return'

      • 一个函数(或其他代码块)即将返回。配置文件Function被调用; * arg *是将返回的值;如果事件是由引发异常引起的,则返回None
    • 'c_call'

      • C 函数即将被调用。这可能是扩展Function,也可能是内置Function。 * arg *是 C 函数对象。
    • 'c_return'

      • C 函数已返回。 * arg *是 C 函数对象。
    • 'c_exception'

      • C 函数引发了异常。 * arg *是 C 函数对象。
  • sys. setrecursionlimit(* limit *)

    • 将 Python 解释器堆栈的最大深度设置为* limit *。此限制可防止无限递归导致 C 堆栈溢出和 Python 崩溃。

可能的最高限制取决于平台。当用户拥有需要深度递归的程序和支持更高限制的平台时,用户可能需要将限制设置为更高。这应该谨慎进行,因为过高的限制可能会导致崩溃。

  • sys. settrace(* tracefunc *)
    • 设置系统的跟踪Function,该Function允许您在 Python 中实现 Python 源代码调试器。该函数是特定于线程的;为了使调试器支持多个线程,必须为每个要调试的线程使用settrace()注册它。

跟踪函数应具有三个参数:* frame event arg *。 * frame *是当前堆栈帧。 * event *是一个字符串:'call''line''return''exception'。 * arg *取决于事件类型。

每当 Importing 新的本地范围时,都会调用 trace 函数(* event *设置为'call')。它应该返回对该范围要使用的本地跟踪函数的引用;如果不应该跟踪该范围,则返回None

本地跟踪函数应返回对自身的引用(或对另一个函数的引用,以在该范围内进行进一步的跟踪),或者返回None以关闭该范围内的跟踪。

这些事件具有以下含义:

  • 'call'

    • 调用一个函数(或 Importing 其他代码块)。全局跟踪函数称为; * arg *是None;返回值指定本地跟踪函数。

    • 'line'

      • 解释器将要执行新的代码行或重新执行循环条件。局部跟踪函数被调用; * arg *是None;返回值指定新的本地跟踪函数。有关其工作原理的详细说明,请参见Objects/lnotab_notes.txt
    • 'return'

      • 一个函数(或其他代码块)即将返回。局部跟踪函数被调用; * arg *是将返回的值;如果事件是由引发异常引起的,则返回None。跟踪函数的返回值将被忽略。
    • 'exception'

      • 发生异常。局部跟踪函数被调用; * arg *是一个 Tuples(exception, value, traceback);返回值指定新的本地跟踪函数。

请注意,由于异常是在调用者链中传播的,因此在每个级别都会生成'exception'事件。

有关代码和框架对象的更多信息,请参见标准类型层次结构

CPython 实现细节: settrace()函数仅用于实现调试器,事件探查器,覆盖率工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能并非在所有 Python 实现中都可用。

  • sys. settscdump(* on_flag *)
    • 如果* on_flag 为 true,则使用 Pentium 时间戳计数器激活 VM 测量的转储。如果 on_flag *已关闭,请停用这些转储。仅当 Python 使用--with-tsc编译时,此Function才可用。要了解此转储的输出,请在 Python 源代码中阅读Python/ceval.c

2.4 版的新Function。

CPython 实现细节: 该函数与 CPython 实现细节紧密相关,因此不可能在其他地方实现。

  • sys. stdin
  • sys. stdout
  • sys. stderr
    • 与解释器的标准 Importing,输出和错误流相对应的文件对象。 stdin用于除脚本之外的所有解释器 Importing,但包括对input()raw_input()的调用。 stdout用于printexpression语句的输出以及input()raw_input()的提示。解释程序自己的提示和(几乎所有的)错误消息都发送到stderrstdoutstderr不必是内置文件对象:任何对象都可以接受,只要它具有使用字符串参数的write()方法即可。 (更改这些对象不会影响os.popen()os.system()os模块中的exec*()函数家族执行的标准 I/O 流程。)
  • sys. __stdin__
  • sys. __stdout__
  • sys. __stderr__
    • 这些对象在程序开始时包含stdinstderrstdout的原始值。它们在完成过程中使用,并且无论sys.std*对象是否已重定向,都可以打印到实际的标准流。

如果实际文件已被损坏的对象覆盖,它也可以用于将实际文件还原到已知的工作文件对象。但是,执行此操作的首选方法是在替换之前的流之前显式保存它,并还原保存的对象。

  • sys. subversion
    • 一个三 Tuples(仓库,分支,版本),代表 Python 解释程序的 Subversion 信息。 * repo *是存储库的名称'CPython'。 * branch *是形式为'trunk''branches/name''tags/name'的字符串。 * version *是svnversion的输出,如果解释器是从 Subversion 检出构建的;它包含版本号(范围),如果存在本地修改,则可能包含尾随的“ M”。如果树已导出(或 svnversion 不可用),则该分支为Include/patchlevel.h的修订版。否则为None

2.5 版的新Function。

Note

Python 现在使用 git developed。在最新的 Python 2.7 错误修正版本中,subversion因此包含占位符信息。在 Python 3.3 中已将其删除。

  • sys. tracebacklimit

    • 当此变量设置为整数值时,它确定发生未处理的异常时打印的回溯信息的最大级别数。默认值为1000。当设置为0或更小时,所有回溯信息将被抑制,并且仅打印异常类型和值。
  • sys. version

    • 一个字符串,其中包含 Python 解释器的版本号以及有关内部版本号和使用的编译器的其他信息。启动交互式解释器时,将显示此字符串。不要从中提取版本信息,而是使用version_infoplatform模块提供的Function。
  • sys. api_version

    • 此解释器的 C API 版本。当调试 Python 和扩展模块之间的版本冲突时,程序员可能会发现这很有用。

2.3 版的新Function。

  • sys. version_info
    • 一个 Tuples,包含版本号的五个组成部分:* major minor micro releaselevel serial 。除 releaselevel *外的所有值都是整数;发布级别为'alpha''beta''candidate''final'。对应于 Python 2.0 版的version_info值为(2, 0, 0, 'final', 0)。也可以pass名称访问组件,因此sys.version_info[0]等效于sys.version_info.major,依此类推。

2.0 版中的新Function。

在 2.7 版中进行了更改:添加了命名组件属性

  • sys. warnoptions

    • 这是警告框架的实现细节。请勿修改此值。有关警告框架的更多信息,请参考warnings模块。
  • sys. winver

    • Windows 平台上用于形成注册表项的版本号。这作为字符串资源 1000 存储在 Python DLL 中。该值通常是version的前三个字符。 sys模块中提供了此信息,仅供参考;修改此值不会影响 Python 使用的注册表项。可用性:Windows。

Citations