29.1. sys - 系统特定的参数和函数

本模块提供了访问由解释器使用和维护的一些变量和与解释器强烈交互的函数。它始终是可用的。

sys.abiflags

在使用标准的configure脚本构建Python的POSIX系统上,它包含由 PEP 3149指定的ABI标志。

版本3.2中的新功能。

sys.argv

传递给Python脚本的命令行参数列表。argv[0]是脚本的名称(是否是完整的路径名这要取决于操作系统)。如果使用解释器的-c命令行选项执行命令,则argv[0]设置为字符串'-c'如果无脚本名称传递给 Python 解释器, argv[0]是空字符串。

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

sys.base_exec_prefix

在运行site.py之前的Python启动期间设置为与exec_prefix相同的值。如果未在virtual environment中运行,值将保持不变;如果site.py发现虚拟环境正在使用,则prefixexec_prefix的值将更改为指向虚拟环境,而base_prefixbase_exec_prefix将保持指向基本Python安装(创建虚拟环境的安装)。

版本3.3中的新功能。

sys.base_prefix

在启动site.py之前的Python启动期间设置为与prefix相同的值。如果未在virtual environment中运行,值将保持不变;如果site.py发现虚拟环境正在使用,则prefixexec_prefix的值将更改为指向虚拟环境,而base_prefixbase_exec_prefix将保持指向基本Python安装(创建虚拟环境的安装)。

版本3.3中的新功能。

sys.byteorder

本机字节顺序的指示器。在big-endian(最高有效字节在第一位)平台上的值为'big',在little-endian(最低有效字节在第一位)平台上的值为'little'

sys.builtin_module_names

一个字符串元组,给出编译进该Python 解释器的所有模块的名称。(此信息不可用任何其他方式获取到 — — modules.keys()仅列出已导入的模块。)

sys.call_tracing(func, args)

当跟踪功能可用时,触发func(*args)的调用。跟踪的状态被保存,并且之后将恢复。它从调试器中的一个检查点调用,以递归方式调试某些其它代码。

sys.copyright

一个包含Python 解释器版权的字符串。

sys._clear_type_cache()

清除内部类型的缓存。The type cache is used to speed up attribute and method lookups.Use the function only to drop unnecessary references during reference leak debugging.

This function should be used for internal and specialized purposes only.

sys._current_frames()

返回一个字典,将每个线程标识符映射到函数调用时线程中正在活跃的最顶层的堆栈帧。请注意在traceback模块中的函数可以根据这样的帧构建调用栈。

这对调试死锁是最有用的:此功能不需要死锁线程的合作,且这些线程的调用堆栈都已冻结只要它们仍处于死锁的状态。非死锁线程返回的帧可能与调用代码检查该帧时线程中正在活跃的帧没有关系。

此函数应仅用于内部和特殊目的。

sys._debugmallocstats()

将关于CPython内存分配器状态的低级信息打印到stderr。

如果Python配置了-with-pydebug,它还执行一些昂贵的内部一致性检查。

版本3.3中的新功能。

CPython实现细节:此函数特定于CPython。确切的输出格式在此未定义,可能会更改。

sys.dllhandle

整数,指定 Python DLL 的句柄。可用的平台: Windows。

sys.displayhook(value)

如果不是None,此函数将打印repr(value)sys.stdout,并保存中的builtins._If repr(value) is not encodable to sys.stdout.encoding with sys.stdout.errors error handler (which is probably 'strict'), encode it to sys.stdout.encoding with 'backslashreplace' error handler.

sys.displayhook在 Python 的交互式会话中输入的expression的计算结果上被调用。通过将另一个单参数函数赋值给sys.displayhook,可以自定义这些值的显示。

伪代码:

def displayhook(value):
    if value is None:
        return
    # Set '_' to None to avoid recursion
    builtins._ = None
    text = repr(value)
    try:
        sys.stdout.write(text)
    except UnicodeEncodeError:
        bytes = text.encode(sys.stdout.encoding, 'backslashreplace')
        if hasattr(sys.stdout, 'buffer'):
            sys.stdout.buffer.write(bytes)
        else:
            text = bytes.decode(sys.stdout.encoding, 'strict')
            sys.stdout.write(text)
    sys.stdout.write("\n")
    builtins._ = value

在版本3.2中更改:UnicodeEncodeError上使用'backslashreplace'错误处理程序。

sys.dont_write_bytecode

如果这是真的,Python将不会尝试在导入源模块时写入.pyc文件。此值初始设置为TrueFalse,具体取决于-B命令行选项和 PYTHONDONTWRITEBYTECODE环境变量,但您可以自行设置以控制字节码文件生成。

sys.excepthook(type, value, traceback)

打印给定的回溯和异常到sys.stderr

当异常被引发并没有被捕获时,解释器将以三个参数:异常类、异常实例和回溯对象调用sys.excepthook在交互会话中,这发生在控制返回到提示之前;在Python程序中,这发生在程序退出之前。通过向sys.excepthook分配另一个三个参数的函数,可以自定义这种顶级的异常处理。

sys.__displayhook__
sys.__excepthook__

这两个对象包含displayhookexcepthook在程序开始时的原始值。保存它们是为了在displayhookexcepthook被不小心换成有问题的对象时可以恢复它们。

sys.exc_info()

此函数返回一个三元组,它们给出当前正在处理的异常的信息。返回的信息特定于当前的线程和当前的堆栈帧。如果当前的堆栈帧没在处理异常,则从调用者的堆栈帧、调用者的调用者、等等获取信息,直至找到正在处理异常的堆栈帧。这里,“处理异常”被定义为“执行一个except子句”。对于任何堆栈帧,只有当前处理的异常的信息是可访问的。

如果堆栈上没有正在处理的异常,则返回包含三个None 值的元组。否则,返回(type, value, traceback)它们的含义是:类型获取正在处理的异常的类型(BaseException的子类); value获取异常实例(异常类型的实例); traceback获取一个跟踪对象(参见参考手册),它将调用堆栈封装在异常最初发生的点。

sys.exec_prefix

一个字符串,提供在其中安装平台相关的Python文件的特定于站点的目录前缀;默认情况下,这也是'/usr/local'它可以在构建时通过configure脚本中的--exec-prefix参数设置。具体来说,所有配置文件(例如,the pyconfig.h header file) are installed in the directory exec_prefix/lib/pythonX.Y/config, and shared library modules are installed in exec_prefix/lib/pythonX.Y/lib-dynload, where X.Y is the version number of Python, for example 3.2.

如果virtual environment有效,则在site.py中更改此值以指向虚拟环境。Python安装的值仍然可用,通过base_exec_prefix

sys.executable

一个字符串,给出Python解释器的可执行二进制文件的绝对路径。如果Python无法检索到其可执行程序的真实路径,sys.executable将为一个空字符串或None

sys.exit([arg])

从 Python 退出。它通过引发SystemExit异常实现,所以try语句的finally字句指定的清理动作将生效,还可以在外层拦截这种退出的尝试。

可选参数arg 可以是一个它给出退出的状态(默认是零)整数,也可以是其它类型的对象。如果它是一个整数,shell和类似的程序将认为零是“成功的退出”,其它任何非零值都是“异常退出”。大部分系统要求该值在0-127范围之间,否则将产生未定义的结果。一些系统具有为特定退出代码指定特定含义的约定,但这些通常不发达; Unix程序通常对命令行语法错误使用2,对所有其他类型的错误使用1。如果传递的是其它类型, None等同于0,其它任何对象将被输出到stderr并且导致退出码为1。特别地,当错误发生时,sys.exit("someerrormessage")是一个快速退出程序的方式。

由于exit()最终"只是"引发异常,在主线程中调用时它将只会退出该进程,且该异常不会被拦截。

sys.flags

struct sequence flags显示命令行标志的状态。这些属性都是只读的。

属性flag
debug-d
inspect-i
interactive-i
optimize-O-OO
dont_write_bytecode-B
no_user_site-s
no_site-S
ignore_environment-E
verbose-v
bytes_warning-b
quiet-q
hash_randomization-R

在版本3.2中已更改:为新的-q标志添加了quiet属性。

版本3.2.3中的新功能: hash_randomization属性。

在版本3.3中已更改:删除过时的division_warning属性。

sys.float_info

保存有关浮点类型的信息的struct sequence它包含精度和内部表示形式有关的低级别信息。这些值对应于“C”编程语言的标准头文件float.h中定义的各种浮点常量;有关详细信息,请参见1999 ISO / IEC C标准[C99],“浮动类型的特性”的第5.2.4.2.2节。

属性float.h 中的宏解释
epsilonDBL_EPSILONdifference between 1 and the least value greater than 1 that is representable as a float
digDBL_DIG可在浮点中忠实表示的最小十进制数字位数;见下文
mant_digDBL_MANT_DIGfloat precision: the number of base-radix digits in the significand of a float
maxDBL_MAX可以表示的最大有限浮点数
max_expDBL_MAX_EXPmaximum integer e such that radix**(e-1) is a representable finite float
max_10_expDBL_MAX_10_EXPmaximum integer e such that 10**e is in the range of representable finite floats
minDBL_MIN最小的规格化正浮点数
min_expDBL_MIN_EXPminimum integer e such that radix**(e-1) is a normalized float
min_10_expDBL_MIN_10_EXPminimum integer e such that 10**e is a normalized float
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'
sys.float_repr_style

一个字符串,指示对浮点数使用repr()函数时的行为。如果该字符串的值为'short',那么对于有限的浮点数xrepr(x)旨在产生一个字符串使其满足属性float(repr(x)) = = x这是Python 3.1和更高版本中的常见行为。否则,float_repr_style具有值'legacy'repr(x)的行为方式与在3.1之前的Python版本中相同。

版本3.1中的新功能。

sys.getallocatedblocks()

返回解释器当前分配的内存块的数量,而不考虑它们的大小。此函数主要用于跟踪和调试内存泄漏。由于解释器的内部缓存,结果可能因呼叫而异;您可能需要调用_clear_type_cache()gc.collect()才能获得更可预测的结果。

如果Python构建或实现无法合理计算此信息,则getallocatedblocks()允许返回0。

版本3.4中的新功能。

sys.getcheckinterval()

返回解释器的“检查间隔”;请参见setcheckinterval()

自版本3.2后已弃用:改用getswitchinterval()

sys.getdefaultencoding()

返回当前Unicode 实现所使用的默认字符串编码的名称。

sys.getdlopenflags()

返回用于dlopen()调用所使用的标志的当前值。标志值的符号名称可以在os模块(RTLD_xxx常量,例如os.RTLD_LAZY)。可用的平台:Unix。

sys.getfilesystemencoding()

返回用于将Unicode文件名转换为系统文件名的编码的名称。结果值取决于操作系统:

  • 在Mac OS X上,编码是'utf-8'
  • 在Unix上,编码是根据nl_langinfo(CODESET)的结果的用户首选项。
  • 在Windows NT +上,文件名本地是Unicode,因此不执行转换。getfilesystemencoding()仍然返回'mbcs',因为这是应用程序在将Unicode字符串转换为字符串时应使用的编码名称。
  • 在Windows 9x上,编码是'mbcs'

在版本3.2中更改: getfilesystemencoding()结果不能为None

sys.getrefcount(object)

返回object的引用计数。返回的计数一般比你期望的值多一个,因为它包含getrefcount()参数的(临时)引用。

sys.getrecursionlimit()

返回当前递归的限制也就是Python解释器堆栈最大深度的值。该限制可防止无限递归导致C堆栈溢出和Python崩溃。它可以通过setrecursionlimit()设置。

sys.getsizeof(object[, default])

返回对象的大小,以字节为单位。该对象可以是任何类型。所有内置对象会返回正确的结果,但这并适用于第三方扩展,因为它特定于实现。

只考虑直接归因于对象的内存消耗,而不是它所引用的对象的内存消耗。

如果给出default,若对象没有提供获取其大小的方法将返回该值。否则会引发TypeError

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

有关使用getsizeof()递归查找容器及其所有内容大小的示例,请参见配方递归大小

sys.getswitchinterval()

返回解释器的“线程切换间隔”;请参阅setswitchinterval()

版本3.2中的新功能。

sys._getframe([depth])

从调用堆栈返回一个 frame 对象。如果给出可选的整型depth,返回栈顶以下相应数目的帧对象。如果大于调用堆栈的深度,则引发ValueErrordepth的默认值为零,返回调用栈顶部的帧。

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

sys.getprofile()

获取由setprofile()设置的profiler 函数。

sys.gettrace()

获取由settrace()设置的跟踪函数。

CPython实现细节: gettrace()函数仅用于实现调试器,概要分析器,覆盖工具等。其行为是执行平台的一部分,而不是语言定义的一部分,因此可能无法在所有的 Python 实现中可用。

sys.getwindowsversion()

返回一个已命名的元组,描述当前正在运行的 Windows 版本。已命名的元素是majorminorbuildplatformservice_packservice_pack_minorservice_pack_majorsuite_maskproduct_typrservice_pack包含一个字符串,而所有其他值都是整数。也可以按名称访问组件,所以sys.getwindowsversion()[0]等同于sys.getwindowsversion().major为了与以前版本的兼容性,只有前5个元素可以用索引检索。

platform可以为下列值之一:

常量平台
0 (VER_PLATFORM_WIN32s)Win32s在Windows 3.1
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可以是下列值之一:

常量含义
1 (VER_NT_WORKSTATION)系统是一个工作站。
2 (VER_NT_DOMAIN_CONTROLLER)系统是一个域名控制器。
3 (VER_NT_SERVER)系统是一个服务器,但不是域名控制器。

此函数包装Win32 GetVersionEx()函数;有关这些字段的详细信息,请参阅有关OSVERSIONINFOEX()的Microsoft文档。

可用的平台: Windows。

在版本3.2中更改:更改为命名元组,并添加了service_pack_minorservice_pack_majorsuite_maskproduct_type

sys.get_coroutine_wrapper()

返回None或由set_coroutine_wrapper()设置的包装。

版本3.5中的新功能:有关详细信息,请参阅 PEP 492

此功能已临时添加(有关详细信息,请参阅 PEP 411)。仅用于调试目的。

sys.hash_info

提供数字哈希实现的参数的struct sequence有关数字类型散列的更多详细信息,请参阅Hashing of numeric types

属性解释
width用于哈希值的位宽度
modulus用于数值散列方案的质数模量P.
inf对于正无穷大返回的散列值
nan返回的哈希值
imag乘法器用于复数的虚部
algorithmstr,bytes和memoryview的哈希算法的名称
hash_bits内部输出大小的哈希算法
seed_bits哈希算法的种子密钥的大小

版本3.2中的新功能。

在版本3.4中更改:添加了算法hash_bitsseed_bits

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()函数时它看起来才真正有意义。struct sequence sys.version_info可用于更人性化的相同信息的编码。

有关hexversion的更多详细信息,请参见API and ABI Versioning

sys.implementation

包含有关当前运行的Python解释器的实现的信息的对象。在所有Python实现中都需要以下属性。

name是实现的标识符,例如'cpython'实际的字符串是由Python实现定义的,但它保证为小写。

版本是一个命名的元组,格式与sys.version_info相同。它表示Python 实现的版本。这与当前运行的解释器符合的特定版本的Python 语言有不同的含义,sys.version_info表示。例如,对于PyPy 1.8 sys.implementation.version可以是sys.version_info(1, 8, 'final', 0),而sys.version_info将为version_info(2, 7, 2, 'final', 0)对于CPython,它们是相同的值,因为它是参考实现。

hexversion是十六进制格式的实现版本,如sys.hexversion

cache_tag是导入机制在缓存模块的文件名中使用的标记。按照惯例,它将是实现的名称和版本的复合,如'cpython-33'但是,如果适当,Python实现可以使用一些其他值。如果cache_tag设置为None,则表示应禁用模块高速缓存。

sys.implementation可能包含特定于Python实现的其他属性。这些非标准属性必须以下划线开头,这里不再描述。无论其内容如何,​​sys.implementation在解释器运行期间以及实现版本之间都不会更改。(但是,它可能在Python语言版本之间变化。)有关详细信息,请参阅 PEP 421

版本3.3中的新功能。

sys.int_info

struct sequence,它保存有关Python的整数内部表示的信息。这些属性都是只读的。

属性解释
bits_per_digit每个数字中保存的位数。Python整数内部存储在基址2**int_info.bits_per_digit
sizeof_digitsize in bytes of the C type used to represent a digit

版本3.1中的新功能。

sys.__interactivehook__

当此属性存在时,当解释器在interactive mode中启动时,其值将自动调用(无参数)。这是在读取 PYTHONSTARTUP文件之后完成的,因此您可以在此处设置此挂接。site模块sets this

版本3.4中的新功能。

sys.intern(string)

在“interned”字符串表中输入string,并返回内部字符串 - string本身或副本。内联字符串对于在字典查找中获得一点性能是有用的 - 如果字典中的键被内部化,并且查找键被内部化,则键比较(在散列之后)可以通过指针比较而不是字符串比较来完成。通常,Python程序中使用的名称是自动内部化的,用于保存module,class或实例属性的字典具有嵌入的键。

内置的字符串不是不朽的;您必须保留对intern()的返回值的引用,以便从中获益。

sys.is_finalizing()

如果Python解释器shutting down,则返回True,否则返回False

版本3.5中的新功能。

sys.last_type
sys.last_value
sys.last_traceback

这三个变量并不总是定义的;它们在未处理异常时设置,并且解释器输出错误消息和堆栈跟踪。其用途是允许交互式用户导入一个调试器模块并参与在事后调试无需重新执行导致错误的命令。(Typical use is import pdb; pdb.pm() to enter the post-mortem debugger; see pdb module for more information.)

变量的含义与上述exc_info()中的返回值的含义相同。

sys.maxsize

给出类型Py_ssize_t的变量的最大值的整数可以取。通常在32位平台上的2 ** 31 - 1,并且2 ** 63 - 1

sys.maxunicode

给出最大Unicode代码点的值的整数,即1114111(十六进制的0x10FFFF)。

Changed in version 3.3: Before PEP 393, sys.maxunicode used to be either 0xFFFF or 0x10FFFF, depending on the configuration option that specified whether Unicode characters were stored as UCS-2 or UCS-4.

sys.meta_path

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

请参见

importlib.abc.MetaPathFinder
meta_path上定义finder对象的接口的抽象基类。
importlib.machinery.ModuleSpec
具体类find_spec()应返回的实例。

Changed in version 3.4: Module specs were introduced in Python 3.4, by PEP 451. 早期版本的Python寻找一个名为find_module()的方法。如果meta_path条目没有find_spec()方法,这仍然称为后备。

sys.modules

它是一个字典,将模块名称映射到已加载的模块。它可以被修改来强制重新加载模块和其他技巧。然而,替换字典将不一定按预期工作,删除从字典中的必要项目可能会导致Python失败。

sys.path

指定用于模块搜索路径的字符串列表。它根据环境变量PYTHONPATH进行初始化,再加上安装时的默认值。

此列表的第一项path[0],在程序启动时初始化,是包含调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果解释器被交互地调用,或者如果从标准输入读取脚本),则path[0]是空字符串,其指示Python首先搜索当前目录中的模块。注意脚本的目录在依据PYTHONPATH生成的结果之前 插入。

一个程序可以根据它自己的目的自由地修改此列表。只有字符串和字节应添加到sys.path;所有其他数据类型在导入期间将被忽略。

请参见

模块site描述了如何使用.pth文件来扩展sys.path

sys.path_hooks

一个可调用对象的列表,它们以一个路径为参数并为该路径创建一个finder如果可以创建查找器,它将由可调用对象返回,否则引发ImportError

最初在 PEP 302中阐述。

sys.path_importer_cache

一个字典,作为finder对象的缓存。字典的键是传递给sys.path_hooks的路径,对应的值是找到的查找器。如果路径是有效的文件系统路径,但在sys.path_hooks上找不到finder,则会存储None

最初在 PEP 302中阐述。

在找不到finder时,在版本3.3中更改为: None而不是imp.NullImporter

sys.platform

此字符串包含一个平台标识符,可用于平台相关的组件追加到sys.path

对于Unix系统,除了在Linux上,这是由uname -s返回的低级操作系统名称,返回的版本的第一部分由附加的uname -r'sunos5''freebsd8'除非你想要测试特定的系统版本,因此建议可以使用下面的用法:

if sys.platform.startswith('freebsd'):
    # FreeBSD-specific code here...
elif sys.platform.startswith('linux'):
    # Linux-specific code here...

对于其他的系统,这些值为:

系统platform
Linux'linux'
视窗'win32'
Windows / Cygwin'cygwin'
Mac OS X'darwin'

在版本3.3中更改:在Linux上,sys.platform不再包含主版本。它总是'linux',而不是'linux2''linux3'由于较旧的Python版本包含版本号,因此建议始终使用上面提供的startswith idiom。

请参见

os.name给出了更粗糙的粒度。os.uname()给出了依赖于系统的版本信息。

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

sys.prefix

一个字符串,提供站点特定的目录前缀,其中安装了平台独立的Python文件;默认情况下,这是字符串'/usr/local'它可以在构建时通过configure脚本的--prefix参数设置。The main collection of Python library modules is installed in the directory prefix/lib/pythonX.Y while the platform independent header files (all except pyconfig.h) are stored in prefix/include/pythonX.Y, where X.Y is the version number of Python, for example 3.2.

如果virtual environment有效,则在site.py中更改此值以指向虚拟环境。Python安装的值仍然可用,通过base_prefix

sys.ps1
sys.ps2

解释器的主提示符和次提示符。它们只在解释器的交互模式中定义。它们的初始值是'>>> ''... '。 如果一个非字符串对象被分配给任一变量,则每次解释器准备读取一个新的交互式命令时,它的str()这可以用于实现动态提示。

sys.setcheckinterval(interval)

设置解释器的"检查间隔"。此整数值决定解释器检查周期性事情的频率,比如线程切换和信号处理程序。默认值为100,意味着每100个Python虚拟指令执行一次检查。将其设置为一个较大的值可能会增加使用线程的应用程序的性能。将其设置为<= 0的一个值将检查每个虚拟机指令,这会最大限度地提高响应能力,同时会增加开销。

自版本3.2后已弃用:此函数不再有效果,因为线程切换和异步任务的内部逻辑已重写。请改用setswitchinterval()

sys.setdlopenflags(n)

设置解释器调用dlopen()的标志,例如解释器如何加载扩展模块。除其他外,如果以sys.setdlopenflags(0)形式调用,将使得导入模块时启用惰性解析符号。要跨扩展模块共享符号,请调用sys.setdlopenflags(os.RTLD_GLOBAL)标志值的符号名称可以在os模块(RTLD_xxx常量,例如os.RTLD_LAZY)。

可用的平台:Unix。

sys.setprofile(profilefunc)

设置系统的探查函数,使你可以在Python中实现Python源代码代码探查器。更多关于Python探查器的信息请参阅The Python Profilers一章。系统探查函数的调用与系统的跟踪函数类似(见settrace()),但它不会为每个执行的代码行调用(仅仅是调用并返回,但是在即使设置了一个异常时仍会报告一个事件)。该函数是线程特异的,但是它无法知道线程之间切换的上下文,因此在多线程的场景下使用它是不合理的。此外,没有用到它的返回值,因此它可以简单的返回None

sys.setrecursionlimit(limit)

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

最高可能的限制取决于平台。当用户有需要深度递归的程序和支持更高限制的平台时,用户可能需要将限制设置得更高。设置时应该小心,因为太高的限制可能导致程序崩溃。

如果新限制在当前递归深度处过低,则会引发RecursionError异常。

在版本3.5.1中更改:如果新限制在当前递归深度过低,则现在会出现RecursionError异常。

sys.setswitchinterval(interval)

设置解释器的线程切换间隔(以秒为单位)。此浮点值确定分配给并发运行的Python线程的“时间片”的理想持续时间。请注意,实际值可以更高,特别是如果使用长期运行的内部函数或方法。此外,在间隔结束时哪个线程被调度是操作系统的决定。解释器没有自己的调度器。

版本3.2中的新功能。

sys.settrace(tracefunc)

设置系统的跟踪函数,它允许你在Python中实现Python源代码调试器。函数是线程特定的;对于调试器支持多个线程,必须使用settrace()对每个正在调试的线程进行注册。

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

The trace function is invoked (with event set to 'call') whenever a new local scope is entered; it should return a reference to a local trace function to be used that scope, or None if the scope shouldn’t be traced.

局部跟踪函数应返回一个自身的引用(或该范围内另一个函数来进一步追踪),如果要关闭改范围的跟踪则返回None

事件具有以下含义:

'call'
正在调用一个函数(或者进入其它代码块)。将调用全局跟踪函数;argNone;返回值表示局部跟踪函数。
'line'
解释器将执行一行新的代码或者重新执行循环的条件。将调用局部跟踪函数;argNone;返回值表示新的局部跟踪函数。它是如何工作的详细解释请参阅Objects/lnotab_notes.txt
'return'
有个函数(或者代码块)即将返回。将调用局部跟踪函数;arg 是即将返回的值;如果事件是由正在引发的异常引起的则返回None跟踪函数的返回值将被忽略。
'exception'
出现了一个异常。将调用局部的跟踪函数;arg 为一个元组(exception, value, traceback);返回值表示新的局部跟踪函数。
'c_call'
一个C函数即将被调用。这可以是扩展函数或内建。arg 为该C函数对象。
'c_return'
返回了C函数。arg 为该C函数对象。
'c_exception'
C函数引发了异常。arg 为该C函数对象。

请注意,异常会依据调用方法的链传播,并在每个级别生成一个'exception'事件。

对代码和框架对象的详细信息,请参阅The standard type hierarchy

CPython实现细节: settrace()函数仅用于实现调试器,概要分析器,覆盖工具等。其行为是执行平台的一部分,而不是语言定义的一部分,因此可能无法在所有的 Python 实现中可用。

sys.settscdump(on_flag)

如果on_flag为真,激活VM measurements使用奔腾时间戳计数器dump。如果on_flag处于关闭状态,则取消这些dump。该功能仅在Python以--with-tsc编译时可用。若要了解此转储的输出,请阅读Python源代码中的Python/ceval.c

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

sys.set_coroutine_wrapper(wrapper)

Allows intercepting creation of coroutine objects (only ones that are created by an async def function; generators decorated with types.coroutine() or asyncio.coroutine() will not be intercepted).

包装器参数必须是:

  • 接受一个参数(协程对象)的可调用方;
  • None,以重置包装器。

如果调用两次,新的包装将替换前一个。该函数是线程特定的。

包装器 callable不能直接或间接定义新的协程:

def wrapper(coro):
    async def wrap(coro):
        return await coro
    return wrap(coro)
sys.set_coroutine_wrapper(wrapper)

async def foo():
    pass

# The following line will fail with a RuntimeError, because
# ``wrapper`` creates a ``wrap(coro)`` coroutine:
foo()

另请参见get_coroutine_wrapper()

版本3.5中的新功能:有关详细信息,请参阅 PEP 492

此功能已临时添加(有关详细信息,请参阅 PEP 411)。仅用于调试目的。

sys.stdin
sys.stdout
sys.stderr

File objects

  • stdin用于所有交互输入(包括调用input());
  • stdout用于输出print()expression语句和input()
  • 解释器自己的提示及其错误消息转到stderr

这些流是与open()函数返回的常规text files其参数选择如下:

  • 字符编码是平台相关的。在Windows下,如果流是交互式的(即,如果其isatty()方法返回True),则使用控制台代码页,否则使用ANSI代码页。在其他平台下,使用区域设置编码(请参阅locale.getpreferredencoding())。

    但是在所有平台下,您可以在启动Python之前通过设置 PYTHONIOENCODING环境变量来覆盖此值。

  • 当交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。您可以使用-u命令行选项覆盖此值。

要从/向标准流写入或读取二进制数据,请使用基础二进制buffer对象。例如,要将字节写入stdout,请使用sys.stdout.buffer.write(b'abc')

但是,如果你正在写一个库(并且不控制它的代码将在哪个上下文中被执行),请注意,标准流可以被像io.StringIO这样的类似文件的对象替换不支持buffer属性。

sys.__stdin__
sys.__stdout__
sys.__stderr__

这些对象包含程序启动时stdinstderrstdout的原始值。它们在销毁时用到,且可用于打印正真的标准流而无论sys.std*对象是否被重定向。

它还可以用于将实际的文件还原到已知的工作文件对象,以防它们被损坏的对象覆盖。然而,首选的办法是替换它之前明确保存上一个流然后还原保存的对象。

Under some conditions stdin, stdout and stderr as well as the original values __stdin__, __stdout__ and __stderr__ can be None. 通常情况下,Windows GUI应用程序未连接到控制台,Python应用程序以pythonw开头。

sys.thread_info

保存有关线程实现的信息的struct sequence

属性解释
name

线程实现的名称:

  • 'nt': Windows threads
  • 'pthread': POSIX threads
  • 'solaris': Solaris threads
lock

锁实现的名称:

  • 'semaphore': a lock uses a semaphore
  • 'mutex+cond': a lock uses a mutex and a condition variable
  • None if this information is unknown
version线程库的名称和版本。它是一个字符串,或None如果这些信息未知。

版本3.3中的新功能。

sys.tracebacklimit

当这个变量设置为一个整数值时,它决定未处理的异常发生时打印的追踪信息的最大数目。默认值为1000设置为0或更小时,将丢弃所有的追踪信息,只打印异常类型和值。

sys.version

一个字符串,包含Python解释器的版本号以及版本号和使用的编译器的额外信息。交互式解释器启动时将显示此字符串。不用从它提取版本信息,使用version_infoplatform模块所提供的函数。

sys.api_version

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

sys.version_info

一个包含版本编号五个组件的元组:majorminormicroreleaselevelserialreleaselevel之外的所有值都是整数;释放级别是'alpha''beta''candidate''final'对应于Python版本2.0的version_info值是(2,0,0,'final',0)组件也可按名称访问,所以sys.version_info[0]就等于sys.version_info.major等等。

在版本3.1中已更改:添加了命名组件属性。

sys.warnoptions

这是警告框架的实现细节;不要修改此值。请参阅warnings模块以获得更多警告框架的详细信息。

sys.winver

在Windows平台上用于生成注册表项的版本号。它以字符串资源1000保存在Python DLL中。该值通常是version的前三个字符。它在sys模块中提供,用于信息目的;修改此值对Python使用的注册表项没有影响。可用的平台: Windows。

sys._xoptions

通过-X命令行选项传递的各种特定于实现的标志的字典。选项名称或者映射到它们的值,如果明确给定,或者映射到True例:

$ ./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}

CPython实现细节:这是一种特定于CPython的访问通过-X传递的选项的方法。其他实现可以通过其他手段导出它们,或者根本不导出。

版本3.2中的新功能。

引文

[C99]ISO / IEC 9899:1999。“Programming languages-C.”本标准的公开草案可在http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf获得。