sys ---系统特定参数和功能


该模块提供对解释器使用或维护的某些变量的访问,以及对与解释器强交互的函数的访问。它总是可用的。

sys.abiflags

在用标准构建python的posix系统上 configure 脚本,它包含由指定的ABI标志 PEP 3149 .

在 3.8 版更改: 默认标志变为空字符串 (m pymalloc的标志已删除)。

3.2 新版功能.

sys.addaudithook(hook)

追加可调用的 hook 到当前解释器的活动审核挂钩列表。

当审核事件通过 sys.audit() 函数时,将按照添加事件名称和参数元组的顺序调用每个钩子。本机钩子由添加 PySys_AddAuditHook() 首先调用,然后在当前解释器中添加挂钩。然后,挂钩可以记录事件、引发异常以中止操作或完全终止进程。

提出一个 auditing event sys.addaudithook 没有参数。

请参阅 audit events table 对于CPython引发的所有事件,以及 PEP 578 用于最初的设计讨论。

3.8 新版功能.

在 3.8.1 版更改: 异常源于 Exception 但不是 RuntimeError 不再被压制。

CPython implementation detail: 启用跟踪时(请参见 settrace() ),只有当可调用的 __cantrace__ 设置为真值的成员。否则,跟踪函数将跳过钩子。

sys.argv

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

要循环访问标准输入或命令行上给定的文件列表,请参见 fileinput 模块。

也见 sys.orig_argv .

注解

在Unix上,命令行参数由操作系统中的字节传递。python使用文件系统编码和“代理转义”错误处理程序对它们进行解码。当需要原始字节时,可以通过 [os.fsencode(arg) for arg in sys.argv] .

sys.audit(event, *args)

引发审核事件并触发任何活动的审核挂钩。 eve NT 是标识事件的字符串,并且 args 可以包含具有有关事件的更多信息的可选参数。给定事件的参数数量和类型被视为公共且稳定的API,不应在不同版本之间进行修改。

例如,将一个审核事件命名为 os.chdir 。此事件有一个名为 path 它将包含请求的新工作目录。

sys.audit() 将调用现有的审计挂钩,传递事件名称和参数,并将从任何挂钩重新引发第一个异常。通常,如果引发异常,则不应处理该异常,并应尽快终止该进程。这允许钩子实现决定如何响应特定事件:它们只能记录事件或通过引发异常中止操作。

使用 sys.addaudithook()PySys_AddAuditHook() 功能。

此函数的本机等效项是 PySys_Audit() . 如果可能,最好使用本机函数。

audit events table 对于CPython引发的所有事件。

3.8 新版功能.

sys.base_exec_prefix

在python启动期间设置,在 site.py 运行,值与 exec_prefix . 如果不是在 virtual environment 值将保持不变;如果 site.py 查找正在使用的虚拟环境,值为 prefixexec_prefix 将更改为指向虚拟环境,而 base_prefixbase_exec_prefix 将继续指向基本的python安装(从中创建虚拟环境的安装)。

3.3 新版功能.

sys.base_prefix

在python启动期间设置,在 site.py 运行,值与 prefix . 如果不是在 virtual environment 值将保持不变;如果 site.py 查找正在使用的虚拟环境,值为 prefixexec_prefix 将更改为指向虚拟环境,而 base_prefixbase_exec_prefix 将继续指向基本的python安装(从中创建虚拟环境的安装)。

3.3 新版功能.

sys.byteorder

本机字节顺序的指示器。这将有价值 'big' 在big endian(最重要的字节优先)平台上,以及 'little' 在小endian(最低有效字节优先)平台上。

sys.builtin_module_names

一个字符串元组,包含编译到此Python解释器中的所有模块的名称。(此信息不能以任何其他方式获得 modules.keys() 仅列出导入的模块。)

另请参阅 sys.stdlib_module_names 列表。

sys.call_tracing(func, args)

调用 func(*args) ,同时启用跟踪。跟踪状态将被保存,然后恢复。这是为了从调试器中从检查点调用,以递归地调试其他一些代码。

sys.copyright

包含与Python解释器相关的版权的字符串。

sys._clear_type_cache()

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

此功能只能用于内部和专门目的。

sys._current_frames()

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

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

此功能只能用于内部和专门目的。

提出一个 auditing event sys._current_frames 没有参数。

sys._current_exceptions()

返回一个字典,该字典将每个线程的标识符映射到调用函数时该线程中当前活动的最顶层异常。如果线程当前没有处理异常,则不会将其包括在结果字典中。

这对于统计分析最有用。

此功能只能用于内部和专门目的。

引发一个 auditing event sys._current_exceptions 没有任何争论。

sys.breakpointhook()

这个钩子函数是由内置函数调用的 breakpoint() . 默认情况下,它会将您放入 pdb 但它可以设置为任何其他函数,以便您可以选择使用哪个调试器。

此函数的签名取决于它调用的内容。例如,默认绑定(例如 pdb.set_trace() )不需要参数,但可以将其绑定到需要其他参数(位置和/或关键字)的函数。内置的 breakpoint() 函数传递其 *args**kws 直接通过。无论什么 breakpointhooks() 退货来自 breakpoint() .

默认实现首先查询环境变量 PYTHONBREAKPOINT . 如果设置为 "0" 然后该函数立即返回;即它是一个no-op。如果环境变量未设置,或设置为空字符串, pdb.set_trace() 被调用。否则,该变量应使用Python的点式导入命名法命名要运行的函数,例如 package.subpackage.module.function . 在这种情况下, package.subpackage.module 将被导入,并且生成的模块必须具有名为 function() .这是运行,传球 *args**kws 什么 function() 返回, sys.breakpointhook() 返回到内置 breakpoint() 功能。

请注意,如果在导入名为 PYTHONBREAKPOINT ,A RuntimeWarning 报告并忽略断点。

还要注意,如果 sys.breakpointhook() 以编程方式重写, PYTHONBREAKPOINTnot 请教。

3.7 新版功能.

sys._debugmallocstats()

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

如果使用pydebug配置了python,那么它还将执行一些昂贵的内部一致性检查。

3.3 新版功能.

CPython implementation detail: 此功能特定于cpython。此处未定义确切的输出格式,可能会更改。

sys.dllhandle

指定python dll句柄的整数。

Availability :Windows。

sys.displayhook(value)

如果 value 不是 None ,此功能打印 repr(value)sys.stdout ,并保存 value 在里面 builtins._ .如果 repr(value) 不可编码 sys.stdout.encoding 具有 sys.stdout.errors 错误处理程序(可能是 'strict' )将其编码为 sys.stdout.encoding 具有 'backslashreplace' 错误处理程序。

sys.displayhook 对计算结果调用 expression 在交互式Python会话中输入。这些值的显示可以通过将另一个单参数函数赋给 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 版更改: 使用 'backslashreplace' 上的错误处理程序 UnicodeEncodeError .

sys.dont_write_bytecode

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

sys.pycache_prefix

如果已设置(未设置 None ,python将写入字节码缓存 .pyc 文件到(并从中读取)此目录下的并行目录树,而不是从 __pycache__ 源代码树中的目录。任何 __pycache__ 源代码树中的目录将被忽略并新建 .pyc 在pycache前缀中写入的文件。因此,如果您使用 compileall 作为预构建步骤,必须确保使用运行时将使用的相同pycache前缀(如果有)运行它。

相对路径是相对于当前工作目录解释的。

此值最初是基于 -X pycache_prefix=PATH 命令行选项或 PYTHONPYCACHEPREFIX 环境变量(命令行优先)。如果两者都不设置,则为 None .

3.8 新版功能.

sys.excepthook(type, value, traceback)

此函数打印给定的回溯和异常 sys.stderr .

当异常被引发且未被捕获时,解释器调用 sys.excepthook 有三个参数,异常类、异常实例和一个回溯对象。在交互会话中,这发生在控件返回到提示之前;在Python程序中,这发生在程序退出之前。通过将另一个三参数函数赋给 sys.excepthook .

提出一个 auditing event sys.excepthook 带着论据 hooktypevaluetraceback .

参见

这个 sys.unraisablehook() 函数处理不可计算的异常和 threading.excepthook() 函数处理由引发的异常 threading.Thread.run() .

sys.__breakpointhook__
sys.__displayhook__
sys.__excepthook__
sys.__unraisablehook__

这些对象包含 breakpointhookdisplayhookexcepthookunraisablehook 在程序开始时。它们被保存下来以便 breakpointhookdisplayhookexcepthookunraisablehook 可以恢复,以防它们碰巧被损坏或替代对象替换。

3.7 新版功能: __breakpointhook__

3.8 新版功能: __unraisablehook__

sys.exc_info()

此函数返回三个值的元组,这些值提供有关当前正在处理的异常的信息。返回的信息特定于当前线程和当前堆栈帧。如果当前堆栈帧不处理异常,则从调用堆栈帧或其调用方获取信息,依此类推,直到找到处理异常的堆栈帧为止。这里,“处理异常”定义为“执行except子句”。对于任何堆栈帧,只有当前处理的异常的信息是可访问的。

如果在堆栈的任何地方都没有处理异常,则包含三个 None 返回值。否则,返回的值为 (type, value, traceback) . 其含义是: type 获取正在处理的异常的类型(子类 BaseException价值 获取异常实例(异常类型的实例); 追溯 得到一个 traceback object 它将调用堆栈封装在异常最初发生的位置。

sys.exec_prefix

一个字符串,给出安装依赖平台的python文件的特定于站点的目录前缀;默认情况下,这也是 '/usr/local' . 可以在生成时使用 --exec-prefix 参数 configure 脚本。具体来说,所有配置文件(例如 pyconfig.h 头文件)安装在目录中 {exec_prefix}/lib/python{X.Y}/config 和共享库模块安装在 {exec_prefix}/lib/python{X.Y}/lib-dynload 在哪里 X.Y 例如,是python的版本号 3.2 .

注解

如果A virtual environment 有效,此值将在 site.py 指向虚拟环境。python安装的值仍然可用,通过 base_exec_prefix .

sys.executable

为python解释器提供可执行二进制文件的绝对路径的字符串,在有意义的系统上。如果python无法检索到其可执行文件的实际路径, sys.executable 将是空字符串或 None .

sys.exit([arg])

从python退出。这是通过提高 SystemExit 异常,因此由finally子句指定的清理操作 try 语句得到遵守,并且可以在外部级别拦截退出尝试。

可选参数 arg 可以是提供退出状态(默认为零)的整数,也可以是其他类型的对象。如果它是一个整数,零被视为“成功终止”,任何非零值被外壳等视为“异常终止”。大多数系统要求它在0-127范围内,否则会产生未定义的结果。有些系统有一个为特定的退出代码指定特定含义的约定,但这些代码通常不发达;UNIX程序通常使用2表示命令行语法错误,1表示所有其他类型的错误。如果传递了其他类型的对象, None 等于传递零,并且任何其他对象都将打印到 stderr 并导致退出代码为1。特别地, sys.exit("some error message") 是一种在发生错误时快速退出程序的方法。

自从 exit() 最终,“仅”会引发异常,它仅在从主线程调用时退出进程,并且不会截获异常。

在 3.6 版更改: 如果在python解释器捕获到 SystemExit (例如,在标准流中刷新缓冲数据时出错),退出状态更改为120。

sys.flags

The named tuple flags exposes the status of command line flags. The attributes are read only.

属性

flag

debug

-d

inspect

-i

interactive

-i

isolated

-I

optimize

-O or -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

dev_mode

-X dev (Python Development Mode)

utf8_mode

-X utf8

在 3.2 版更改: 补充 quiet 新的属性 -q flag。

3.2.3 新版功能: 这个 hash_randomization 属性。

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

在 3.4 版更改: 补充 isolated 的属性 -I isolated flag。

在 3.7 版更改: 增加了 dev_mode 新的属性 Python Development Mode 以及 utf8_mode 新的属性 -X utf8 旗帜。

sys.float_info

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

属性

浮点宏

解释

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

最大整数 e 这样的话 radix**(e-1) 是可表示的有限浮点

max_10_exp

DBL_MAX_10_EXP

最大整数 e 这样的话 10**e 在可表示的有限浮点数范围内

min

DBL_MIN

最小可表示正 归一化 浮动

使用 math.ulp(0.0) 得到最小的阳性结果 规格化 可代表的浮动。

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 如果返回到float,则会恢复表示相同十进制值的字符串::

>>> 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 . 这是Python3.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.getandroidapilevel()

以整数形式返回Android的编译时API版本。

Availability :安卓。

3.7 新版功能.

sys.getdefaultencoding()

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

sys.getdlopenflags()

返回用于 dlopen() 调用。标记值的符号名称可以在 os 模块 (RTLD_xxx 常量,例如 os.RTLD_LAZY

Availability UNIX。

sys.getfilesystemencoding()

拿到 filesystem encoding :与一起使用的编码 filesystem error handler 若要在Unicode文件名和字节文件名之间进行转换,请执行以下操作。文件系统错误处理程序从 getfilesystemencoding()

为了获得最佳兼容性,尽管也支持将文件名表示为字节,但在所有情况下都应对文件名使用str。接受或返回文件名的函数应该支持字符串或字节,并在内部转换为系统的首选表示形式。

os.fsencode()os.fsdecode() 应确保使用正确的编码和错误模式。

这个 filesystem encoding and error handler 在Python启动时由 PyConfig_Read() 功能:请参阅 filesystem_encodingfilesystem_errors 成员: PyConfig

在 3.2 版更改: getfilesystemencoding() 结果不能是 None 不再。

在 3.6 版更改: Windows不再保证返回 'mbcs' . 见 PEP 529_enablelegacywindowsfsencoding() 更多信息。

在 3.7 版更改: 返回 'utf-8' 如果 Python UTF-8 Mode 已启用。

sys.getfilesystemencodeerrors()

拿到 filesystem error handler :与一起使用的错误处理程序 filesystem encoding 若要在Unicode文件名和字节文件名之间进行转换,请执行以下操作。文件系统编码从 getfilesystemencoding()

os.fsencode()os.fsdecode() 应确保使用正确的编码和错误模式。

这个 filesystem encoding and error handler 在Python启动时由 PyConfig_Read() 功能:请参阅 filesystem_encodingfilesystem_errors 成员: PyConfig

3.6 新版功能.

sys.getrefcount(object)

返回的引用计数 object . 返回的计数通常比预期的要高,因为它将(临时)引用作为参数包含到 getrefcount() .

sys.getrecursionlimit()

返回递归限制的当前值,即python解释器堆栈的最大深度。这个限制防止无限递归导致C堆栈溢出和Python崩溃。它可以设置为 setrecursionlimit() .

sys.getsizeof(object[, default])

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

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

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

getsizeof() 调用对象的 __sizeof__ 方法并添加一个额外的垃圾收集器开销(如果对象由垃圾收集器管理)。

recursive sizeof recipe 例如使用 getsizeof() 递归查找容器及其所有内容的大小。

sys.getswitchinterval()

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

3.2 新版功能.

sys._getframe([depth])

从调用堆栈返回帧对象。如果可选整数 深度 如果给定,则返回许多调用位于堆栈顶部以下的帧对象。如果这比调用堆栈更深, ValueError 提高了。默认值为 深度 为零,返回调用堆栈顶部的帧。

提出一个 auditing event sys._getframe 没有参数。

CPython implementation detail: 此功能只能用于内部和专门目的。它不能保证存在于所有的Python实现中。

sys.getprofile()

获取由设置的探查器函数 setprofile() .

sys.gettrace()

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

CPython implementation detail: 这个 gettrace() 函数仅用于实现调试程序、概要文件、覆盖工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能在所有的Python实现中都不可用。

sys.getwindowsversion()

返回描述当前运行的Windows版本的命名元组。命名元素是 专业少数的建造平台service_packservice_pack_minorservice_pack_majorsuite_maskproduct_typeplatform_version . service_pack 包含字符串, platform_version 三元组和所有其他值都是整数。组件也可以按名称访问,因此 sys.getwindowsversion()[0] 等于 sys.getwindowsversion().major . 为了与以前的版本兼容,只能通过索引检索前5个元素。

平台2 (VER_PLATFORM_WIN32_NT) .

product_type 可能是以下值之一:

常数

意义

1 (VER_NT_WORKSTATION)

系统是一个工作站。

2 (VER_NT_DOMAIN_CONTROLLER)

系统是域控制器。

3 (VER_NT_SERVER)

系统是服务器,但不是域控制器。

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

platform_version 返回当前操作系统的准确主版本、次版本和内部版本号,而不是为进程模拟的版本。它用于日志记录,而不是用于功能检测。

Availability :Windows。

在 3.2 版更改: 更改为命名元组并添加 service_pack_minorservice_pack_majorsuite_maskproduct_type .

在 3.6 版更改: 补充 platform_version

sys.get_asyncgen_hooks()

返回一个 asyncgen_hooks 对象,类似于 namedtuple 形式的 (firstiter, finalizer) 在哪里 第一流的终结器 应该是 None 或具有 asynchronous generator iterator 作为参数,用于通过事件循环计划异步生成器的终结。

3.6 新版功能: PEP 525 了解更多详细信息。

注解

此功能已临时添加(请参见 PEP 411 详情。

sys.get_coroutine_origin_tracking_depth()

获取当前协同程序原点跟踪深度,由设置 set_coroutine_origin_tracking_depth() .

3.7 新版功能.

注解

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

sys.hash_info

A named tuple 给出数值哈希实现的参数。有关数值类型散列的详细信息,请参见 数值类型的散列 .

属性

解释

width

用于hash值的位宽度

modulus

用于数字hash方案的素数模p

inf

为正无穷大返回的hash值

nan

为NaN返回的hash值

imag

复数虚部乘法器

algorithm

str、bytes和memoryviewhash算法的名称

hash_bits

hash算法的内部输出大小

seed_bits

hash算法的种子密钥大小

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
    ...

This is called hexversion since it only really looks meaningful when viewed as the result of passing it to the built-in hex() function. The named tuple sys.version_info may be used for a more human-friendly encoding of the same information.

更多细节 hexversion 可以在 API和ABI版本控制 .

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, 0, 'final', 0)sys.version_info 将是 sys.version_info(2, 7, 2, 'final', 0) . 对于cpython,它们是相同的值,因为它是引用实现。

六角形 实现版本是否为十六进制格式,如 sys.hexversion .

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

sys.implementation 可能包含特定于Python实现的其他属性。这些非标准属性必须以下划线开头,此处不进行描述。无论其内容如何, sys.implementation 在解释器运行期间或在实现版本之间不会更改。(但是,它可能在Python语言版本之间发生变化。)请参见 PEP 421 更多信息。

3.3 新版功能.

注解

添加新的必需属性必须经过正常的PEP过程。参见 PEP 421 更多信息。

sys.int_info

A named tuple 它保存了关于Python内部整数表示的信息。这些属性是只读的。

属性

解释

bits_per_digit

每个数字中保留的位数。python整数内部存储在base中 2**int_info.bits_per_digit

sizeof_digit

用于表示数字的C类型的字节大小

3.1 新版功能.

sys.__interactivehook__

当这个属性存在时,当解释器在 interactive mode . 这是在 PYTHONSTARTUP 文件被读取,这样您就可以在那里设置这个钩子。这个 site 模块 sets this .

提出一个 auditing event cpython.run_interactivehook 带着论证 hook .

3.4 新版功能.

sys.intern(string)

进入 string 在“interned”字符串表中,返回interned字符串 string 自身或副本。在字典查找中,插入字符串有助于获得一点性能——如果字典中的键被插入,并且查找键被插入,则可以通过指针比较(hash后)而不是字符串比较来进行键比较。通常,python程序中使用的名称会自动进行实习生,用于保存模块、类或实例属性的字典具有实习生密钥。

内部字符串不是不朽的;必须保留对返回值的引用 intern() 从中受益。

sys.is_finalizing()

返回 True 如果python解释器是 shutting downFalse 否则。

3.5 新版功能.

sys.last_type
sys.last_value
sys.last_traceback

这三个变量并不总是定义的;它们是在不处理异常和解释器打印错误消息和堆栈回溯时设置的。它们的预期用途是允许交互式用户导入调试程序模块并进行事后调试,而不必重新执行导致错误的命令。(典型用途是 import pdb; pdb.pm() 输入事后调试程序;请参见 pdb 模块了解更多信息。)

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

sys.maxsize

为最大值提供类型变量的整数。 Py_ssize_t 可以采取。通常是 2**31 - 1 在32位平台上 2**63 - 1 在64位平台上。

sys.maxunicode

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

在 3.3 版更改: 之前 PEP 393sys.maxunicode 曾经是 0xFFFF0x10FFFF ,具体取决于指定Unicode字符是存储为UCS-2还是UCS-4的配置选项。

sys.meta_path

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

参见

importlib.abc.MetaPathFinder

定义finder对象接口的抽象基类 meta_path .

importlib.machinery.ModuleSpec

混凝土等级 find_spec() 应返回的实例。

在 3.4 版更改: Module specs 在python 3.4中由 PEP 451 . 早期版本的python寻找一个名为 find_module() . 如果 meta_path 条目没有 find_spec() 方法。

sys.modules

这是一个将模块名称映射到已加载模块的字典。这可以通过操纵来强制重新加载模块和其他技巧。但是,替换字典并不一定能按预期工作,从字典中删除基本项可能会导致python失败。

sys.orig_argv

传递给Python可执行文件的原始命令行参数的列表。

也见 sys.argv .

3.10 新版功能.

sys.path

指定模块搜索路径的字符串列表。从环境变量初始化 PYTHONPATH ,加上依赖于安装的默认值。

在程序启动时初始化,此列表的第一项, path[0] ,是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入读取脚本),则 path[0] 是空字符串,它指示python首先搜索当前目录中的模块。请注意,脚本目录已插入 before 由于以下原因插入的条目: PYTHONPATH .

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

参见

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

sys.path_hooks

使用路径参数尝试创建 finder 对于路径。如果可以创建finder,则由可调用文件返回,否则将引发 ImportError .

最初在中指定 PEP 302 .

sys.path_importer_cache

用作缓存的字典 finder 物体。键是已传递到的路径 sys.path_hooks 这些值就是找到的查找器。如果路径是有效的文件系统路径,但在上找不到查找程序 sys.path_hooks 然后 None 存储。

最初在中指定 PEP 302 .

在 3.3 版更改: None 存储而不是 imp.NullImporter 当找不到查找器时。

sys.platform

此字符串包含一个平台标识符,可用于将特定于平台的组件附加到 sys.path 例如。

uname -s 版本的第一部分由返回 uname -r 附加,例如 'sunos5''freebsd8'在创建python时 . 除非要测试特定的系统版本,否则建议使用以下习惯用法:

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

对于其他系统,值为:

系统

platform 价值

AIX

'aix'

Linux系统

'linux'

Windows

'win32'

Windows / CygWin

'cygwin'

马科斯

'darwin'

在 3.3 版更改: 在Linux上, sys.platform 不再包含主版本。它总是 'linux' ,而不是 'linux2''linux3' . 由于旧的python版本包含版本号,因此建议始终使用 startswith 上面介绍的成语。

在 3.8 版更改: sys.platform 不再包含主版本。它总是 'aix' ,而不是 'aix5''aix7' . 由于旧的python版本包含版本号,因此建议始终使用 startswith 上面介绍的成语。

参见

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

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

sys.platlibdir

平台特定库目录的名称。用于建立标准库的路径和已安装扩展模块的路径。

等于 "lib" 在大多数平台上。在Fedora和SuSE上,它等于 "lib64" 在64位平台上 sys.path 路径(其中 X.Y 是 Python major.minor 版本:

  • /usr/lib64/pythonX.Y/ :标准库(如 os.pyos 模块)

  • /usr/lib64/pythonX.Y/lib-dynload/ :C标准库的扩展模块(如 errno 模块,确切的文件名是特定于平台的)

  • /usr/lib/pythonX.Y/site-packages/ (始终使用 lib 不是 sys.platlibdir ):第三方模块

  • /usr/lib64/pythonX.Y/site-packages/ :C第三方包的扩展模块

3.9 新版功能.

sys.prefix

一个字符串,给出安装平台独立的python文件的特定于站点的目录前缀;默认情况下,这是字符串 '/usr/local' . 可以在生成时使用 --prefix 参数 configure 脚本。python库模块的主要集合安装在目录中 {prefix}/lib/python{X.Y} 而与平台无关的头文件(除 pyconfig.h )存储在 {prefix}/include/python{X.Y} 在哪里 X.Y 例如,是python的版本号 3.2 .

注解

如果A virtual environment 有效,此值将在 site.py 指向虚拟环境。python安装的值仍然可用,通过 base_prefix .

sys.ps1
sys.ps2

指定解释器主提示和辅助提示的字符串。只有当解释器处于交互模式时才定义这些。在这种情况下,它们的初始值是 '>>> ''... ' . 如果将非字符串对象分配给任一变量,则 str() 每次解释器准备读取新的交互命令时都会重新评估;这可用于实现动态提示。

sys.setdlopenflags(n)

设置解释器用于 dlopen() 调用,例如当解释器加载扩展模块时。除其他外,这将在导入模块时启用符号的延迟解析,如果调用为 sys.setdlopenflags(0) . 要跨扩展模块共享符号,请调用为 sys.setdlopenflags(os.RTLD_GLOBAL) . 标记值的符号名称可以在 os 模块 (RTLD_xxx 常量,例如 os.RTLD_LAZY

Availability UNIX。

sys.setprofile(profilefunc)

设置系统的profile函数,它允许您在python中实现一个python源代码分析器。见章 python分析程序 有关Python探查器的详细信息。系统的profile函数的调用与系统的trace函数类似(请参见 settrace() ,但它是用不同的事件调用的,例如,对于每一行执行的代码(仅在调用和返回时调用,但即使设置了异常,也会报告返回事件)。该函数是特定于线程的,但探查器无法了解线程之间的上下文切换,因此在多个线程存在时使用该函数没有意义。另外,它的返回值没有被使用,因此它可以简单地返回 None . 配置文件函数中的错误将导致自身未设置。

配置文件函数应该有三个参数: 框架事件arg . 框架 是当前堆栈帧。 事件 是一个字符串: 'call''return''c_call''c_return''c_exception' . arg 取决于事件类型。

提出一个 auditing event sys.setprofile 没有参数。

事件具有以下含义:

'call'

调用函数(或输入其他代码块)。调用profile函数; argNone .

'return'

函数(或其他代码块)即将返回。调用profile函数; arg 是将返回的值,或者 None 如果事件是由引发的异常引起的。

'c_call'

即将调用C函数。这可能是一个扩展函数或内置函数。 arg 是C函数对象。

'c_return'

已返回C函数。 arg 是C函数对象。

'c_exception'

C函数引发了异常。 arg 是C函数对象。

sys.setrecursionlimit(limit)

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

可能的最高限制取决于平台。当用户拥有一个需要深度递归的程序和一个支持更高限制的平台时,他们可能需要设置更高的限制。这样做应该小心,因为过高的限值会导致撞车。

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

在 3.5.1 版更改: A RecursionError 如果新限制在当前递归深度太低,则现在引发异常。

sys.setswitchinterval(interval)

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

3.2 新版功能.

sys.settrace(tracefunc)

设置系统的跟踪函数,它允许您在Python中实现一个Python源代码调试器。函数是线程特定的;要使调试器支持多个线程,必须使用 settrace() 用于调试或使用的每个线程 threading.settrace() .

跟踪函数应该有三个参数: 框架事件arg . 框架 是当前堆栈帧。 事件 是一个字符串: 'call''line''return''exception''opcode' . arg 取决于事件类型。

调用跟踪函数(使用 事件 设置为 'call' )每当输入一个新的本地作用域时;它应该返回对本地跟踪函数的引用以用于新作用域,或者 None 如果不应该跟踪范围。

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

如果跟踪函数中发生任何错误,它将被取消设置,就像 settrace(None) 被称为。

事件具有以下含义:

'call'

调用函数(或输入其他代码块)。调用全局跟踪函数; argNone ;返回值指定本地跟踪函数。

'line'

解释器将要执行新的代码行或重新执行循环的条件。调用局部跟踪函数; argNone ;返回值指定新的本地跟踪函数。见 Objects/lnotab_notes.txt 详细解释这是如何工作的。可通过设置禁用帧的每行事件 f_trace_linesFalse 在那个框架上。

'return'

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

'exception'

发生异常。调用局部跟踪函数; arg 是元组 (exception, value, traceback) ;返回值指定新的本地跟踪函数。

'opcode'

解释器即将执行新的操作码(请参见 dis 有关操作码的详细信息)。调用局部跟踪函数; argNone ;返回值指定新的本地跟踪函数。默认情况下不会发出每操作码事件:必须通过设置显式请求这些事件 f_trace_opcodesTrue 在框架上。

注意,当异常沿着调用方链传播时, 'exception' 事件在每个级别生成。

对于更细粒度的使用,可以通过分配 frame.f_trace = tracefunc 显式地,而不是依赖于通过已安装的跟踪函数的返回值间接地设置它。这对于激活当前帧上的跟踪功能也是必需的 settrace() 不会的。请注意,要使其工作,必须安装一个全局跟踪函数 settrace() 为了启用运行时跟踪机制,但它不需要是相同的跟踪函数(例如,它可以是一个低开销的跟踪函数,只需返回 None 在每帧上立即禁用自身)。

有关代码和框架对象的详细信息,请参阅 标准类型层次结构 .

提出一个 auditing event sys.settrace 没有参数。

CPython implementation detail: 这个 settrace() 函数仅用于实现调试程序、概要文件、覆盖工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能在所有的Python实现中都不可用。

在 3.7 版更改: 'opcode' 增加事件类型; f_trace_linesf_trace_opcodes 添加到帧的属性

sys.set_asyncgen_hooks(firstiter, finalizer)

接受两个可选关键字参数,这些参数是接受 asynchronous generator iterator 作为一个参数。这个 第一流的 当异步生成器第一次迭代时,将调用Callable。这个 终结器 将在异步生成器即将被垃圾收集时调用。

提出一个 auditing event sys.set_asyncgen_hooks_firstiter 没有参数。

提出一个 auditing event sys.set_asyncgen_hooks_finalizer 没有参数。

引发两个审核事件,因为基础API包含两个调用,每个调用都必须引发自己的事件。

3.6 新版功能: PEP 525 有关更多详细信息,请参阅 终结器 方法参见 asyncio.Loop.shutdown_asyncgens 在里面 Lib/asyncio/base_events.py

注解

此功能已临时添加(请参见 PEP 411 详情。

sys.set_coroutine_origin_tracking_depth(depth)

允许启用或禁用协同程序源跟踪。启用后, cr_origin coroutine对象的属性将包含一个(文件名、行号、函数名)元组,描述创建coroutine对象的回溯,并首先调用最新的调用。禁用时, cr_origin 将一无所有。

要启用,请通过 深度 值大于零;这将设置将捕获其信息的帧数。禁用,通过设置 深度 到零。

此设置是线程特定的。

3.7 新版功能.

注解

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

sys._enablelegacywindowsfsencoding()

更改 filesystem encoding and error handler 分别设置为‘MBCS’和‘REPLACE’,以便与3.6之前的Python版本保持一致。

这相当于定义 PYTHONLEGACYWINDOWSFSENCODING 启动python之前的环境变量。

另请参阅 sys.getfilesystemencoding()sys.getfilesystemencodeerrors()

Availability :Windows。

3.6 新版功能: PEP 529 了解更多详细信息。

sys.stdin
sys.stdout
sys.stderr

File objects 解释程序用于标准输入、输出和错误:

  • stdin 用于所有交互式输入(包括调用 input()

  • stdout 用于输出 print()expression 陈述和提示 input()

  • 解释器自己的提示及其错误消息将转到 stderr .

这些小溪很规则 text files 就像那些被 open() 功能。其参数选择如下:

  • 编码和错误处理是从 PyConfig.stdio_encodingPyConfig.stdio_errors

    在Windows上,UTF-8用于控制台设备。磁盘文件和管道等非字符设备使用系统区域设置编码(即ANSI代码页)。非控制台字符设备,如NUL(即其中 isatty() 退货 True )在启动时使用控制台输入和输出代码页的值,分别用于stdin和stdout/stderr。缺省为系统 locale encoding 如果进程最初没有附加到控制台。

    在启动python之前,可以通过设置环境变量pythonlegacywindowsstdio来覆盖控制台的特殊行为。在这种情况下,控制台代码页用作任何其他字符设备。

    在所有平台下,可以通过设置 PYTHONIOENCODING 启动python或使用 -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__

这些对象包含 stdinstderrstdout 在程序开始时。它们在定稿过程中使用,无论 sys.std* 对象已被重定向。

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

注解

在某些情况下 stdinstdoutstderr 以及原始值 __stdin____stdout____stderr__ 可以是 None . 对于没有连接到控制台的Windows GUI应用程序和以 pythonw .

sys.stdlib_module_names

包含标准库模块名称的冻结字符串集。

它在所有平台上都是一样的。还列出了在某些平台上不可用的模块和在Python构建时禁用的模块。列出了所有模块类型:纯Python模块、内置模块、冻结模块和扩展模块。测试模块被排除在外。

对于包,只列出主包:不列出子包和子模块。例如, email 程序包已列出,但 email.mime 子包和 email.message 子模块未列出。

另请参阅 sys.builtin_module_names 列表。

3.10 新版功能.

sys.thread_info

A named tuple 保存有关线程实现的信息。

属性

解释

name

线程实现的名称:

  • 'nt' :Windows线程

  • 'pthread' :POSIX线程

  • 'solaris' :Solaris线程

lock

锁实现的名称:

  • 'semaphore' :锁使用信号量

  • 'mutex+cond' :锁使用互斥和条件变量

  • None 如果此信息未知

version

线程库的名称和版本。它是一根绳子,或者 None 如果此信息未知。

3.3 新版功能.

sys.tracebacklimit

当此变量设置为整数值时,它将确定在发生未处理的异常时打印的跟踪信息的最大级别数。默认值为 1000 .当设置为 0 或者更少,抑制所有的回溯信息,只打印异常类型和值。

sys.unraisablehook(unraisable, /)

处理无法判断的异常。

当发生异常但Python无法处理时调用。例如,当析构函数引发异常或在垃圾收集期间 (gc.collect()

这个 无法估计 参数具有以下属性:

  • exc_type :异常类型。

  • exc_value :异常值,可以是 None .

  • exc_traceback :异常回溯,可以是 None .

  • err_msg :错误消息,可以是 None .

  • 对象 :导致异常的对象,可以是 None .

默认挂钩格式 err_msg对象 AS: f'{{err_msg}}: {{object!r}}' ;如果 err_msgNone .

sys.unraisablehook() 可以重写以控制如何处理不可度量的异常。

存储 exc_value 使用自定义钩子可以创建一个引用循环。当不再需要异常时,应该明确地清除它以中断引用循环。

存储 对象 如果将自定义钩子设置为正在完成的对象,则可以使用该钩子将其恢复。避免储存 对象 自定义钩子完成后,可以避免重新恢复对象。

也见 excepthook() 它处理未捕获的异常。

提出一个 auditing event sys.unraisablehook 带着论据 hookunraisable .

3.8 新版功能.

sys.version

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

sys.api_version

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

sys.version_info

包含版本号的五个组件的元组: 专业少数的微型的释放水平序列号 . 所有值,除了 释放水平 是整数;发布级别是 'alpha''beta''candidate''final' . 这个 version_info 与python版本2.0对应的值为 (2, 0, 0, 'final', 0) . 组件也可以按名称访问,因此 sys.version_info[0] 等于 sys.version_info.major 等等。

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

sys.warnoptions

这是警告框架的实现细节;不要修改此值。参考 warnings 有关警告框架的详细信息。

sys.winver

用于在Windows平台上形成注册表项的版本号。这在python dll中存储为字符串资源1000。该值通常是 version . 它是在 sys 模块用于信息目的;修改此值对python使用的注册表项没有影响。

Availability :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 implementation detail: 这是通过cpython访问选项的特定方法 -X . 其他实现可以通过其他方式导出它们,或者根本不导出。

3.2 新版功能.

引文

C99

ISO/IEC 9899:1999。”编程语言——C.“本标准的公共草案可在http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf上查阅。