sys — 系统相关参数和函数


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

sys.abiflags

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

3.2 版本加入。

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

可用性:Unix。

sys.addaudithook(hook)

将可调用对象 hook 追加到当前(子)解释器的活动审计钩子列表中。

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

请注意,审计钩子主要用于收集有关内部或以其他方式无法观察到的操作的信息,无论是由 Python 还是由 Python 编写的库执行。它们不适合用于实现“沙箱”。特别是,恶意代码可以很容易地禁用或绕过使用此函数添加的钩子。至少,任何安全敏感的钩子都必须在使用 C API PySys_AddAuditHook() 初始化运行时之前添加,并且任何允许任意内存修改的模块(如 ctypes)都应完全删除或密切监视。

调用 sys.addaudithook() 本身将引发一个名为 sys.addaudithook 的审计事件,且没有参数。如果任何现有钩子引发源自 RuntimeError 的异常,则不会添加新钩子,并且会抑制异常。因此,调用方无法假定已添加其钩子,除非它们控制所有现有钩子。

有关 CPython 引发的所有事件,请参阅 审计事件表,以及 PEP 578 中关于原始设计讨论的内容。

3.8 版本加入。

在 3.8.1 版本中更改: 不再抑制源自 Exception 但不是 RuntimeError 的异常。

CPython 实现细节: 启用跟踪时(请参阅 settrace()),只有当可调用对象具有设置为 true 值的 __cantrace__ 成员时,才会跟踪 Python 钩子。否则,跟踪函数将跳过钩子。

sys.argv

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

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

另请参阅 sys.orig_argv

注解

在 Unix 上,命令行参数由操作系统以字节形式传递。Python 使用文件系统编码和“surrogateescape”错误处理程序对其进行解码。当您需要原始字节时,可以通过 [os.fsencode(arg) for arg in sys.argv] 获取。

sys.audit(event, *args)

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

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

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

使用 sys.addaudithook()PySys_AddAuditHook() 函数添加钩子。

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

有关 CPython 引发的所有事件,请参阅 审计事件表

3.8 版本加入。

sys.base_exec_prefix

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

3.3 版本中新增。

sys.base_prefix

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

3.3 版本中新增。

sys.byteorder

本机字节顺序的指示符。在大端(最高有效字节在前)平台上,此值将为 'big',在小端(最低有效字节在前)平台上,此值将为 'little'

sys.builtin_module_names

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

另请参见 sys.stdlib_module_names 列表。

sys.call_tracing(func, args)

在启用跟踪时调用 func(*args)。跟踪状态会被保存,然后在之后恢复。此功能旨在从检查点由调试器调用,以递归调试或分析其他代码。

在调用由 settrace()setprofile() 设置的跟踪函数时,会暂停跟踪,以避免无限递归。call_tracing() 允许跟踪函数的显式递归。

sys.copyright

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

sys._clear_type_cache()

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

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

自 3.13 版本起已弃用: 请改用更通用的 _clear_internal_caches() 函数。

sys._clear_internal_caches()

清除所有与内部性能相关的缓存。在查找泄漏时使用此函数来释放不必要的引用和内存块。

3.13 版本中新增。

sys._current_frames()

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

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

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

引发一个没有参数的 审计事件 sys._current_frames

sys._current_exceptions()

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

这对于统计分析最有用。

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

引发一个没有参数的 审计事件 sys._current_exceptions

在 3.12 版本中更改: 字典中的每个值现在都是单个异常实例,而不是像从 sys.exc_info() 返回的 3 元组。

sys.breakpointhook()

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

此函数的签名取决于它调用的内容。例如,默认绑定(例如 pdb.set_trace())不期望任何参数,但你可能会将其绑定到期望其他参数(位置参数和/或关键字参数)的函数。内置的 breakpoint() 函数会直接传递其 *args**kwsbreakpointhooks() 返回的任何内容都会从 breakpoint() 返回。

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

请注意,如果在导入 PYTHONBREAKPOINT 所命名的可调用对象时出现任何错误,则会报告一个 RuntimeWarning,并且断点会被忽略。

另请注意,如果 sys.breakpointhook() 被以编程方式覆盖,则 不会 查询 PYTHONBREAKPOINT

3.7 版本中新增。

sys._debugmallocstats()

向 stderr 打印有关 CPython 内存分配器状态的底层信息。

如果 Python 是在调试模式下构建的(configure --with-pydebug option),它还会执行一些耗时的内部一致性检查。

3.3 版本中新增。

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

sys.dllhandle

指定 Python DLL 句柄的整数。

可用性:Windows。

sys.displayhook(value)

如果 value 不是 None,此函数将 repr(value) 打印到 sys.stdout,并将 value 保存在 builtins._ 中。如果 repr(value) 不能使用 sys.stdout.errors 错误处理程序(可能为 'strict')编码为 sys.stdout.encoding,则使用 'backslashreplace' 错误处理程序将其编码为 sys.stdout.encoding

在交互式 Python 会话中输入的表达式的计算结果上调用 sys.displayhook。可以通过为 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._emscripten_info

一个 命名元组,其中包含有关 wasm32-emscripten 平台上环境的信息。命名元组是临时的,将来可能会更改。

_emscripten_info.emscripten_version

Emscripten 版本,为整数元组(主版本号、次版本号、微版本号),例如 (3, 1, 8)

_emscripten_info.runtime

运行时字符串,例如浏览器用户代理、 'Node.js v14.18.2''UNKNOWN'

_emscripten_info.pthreads

如果 Python 是使用 Emscripten pthreads 支持编译的,则为 True

_emscripten_info.shared_memory

如果 Python 是使用共享内存支持编译的,则为 True

可用性:Emscripten。

3.11 版本中新增。

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

当抛出除 SystemExit 之外的异常且未被捕获时,解释器会调用 sys.excepthook,并传入三个参数:异常类、异常实例和一个回溯对象。在交互式会话中,这会在控制权返回到提示符之前发生;在 Python 程序中,这会在程序退出之前发生。可以通过为 sys.excepthook 分配另一个三参数函数来自定义这种顶层异常的处理方式。

当发生未捕获的异常时,会引发一个审计事件 sys.excepthook,参数为 hooktypevaluetraceback。如果没有设置钩子,则 hook 可能为 None。如果任何钩子引发了派生自 RuntimeError 的异常,则对该钩子的调用将被抑制。否则,审计钩子异常将被报告为不可引发,并且将调用 sys.excepthook

另请参阅

sys.unraisablehook() 函数处理不可引发的异常,threading.excepthook() 函数处理由 threading.Thread.run() 引发的异常。

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

这些对象包含程序启动时 breakpointhookdisplayhookexcepthookunraisablehook 的原始值。保存它们是为了在 breakpointhookdisplayhookexcepthookunraisablehook 恰好被替换为损坏或替代对象时,能够恢复它们。

3.7 版本新增: __breakpointhook__

3.8 版本新增: __unraisablehook__

sys.exception()

当在异常处理程序(例如 exceptexcept* 子句)执行时调用此函数时,它会返回此处理程序捕获的异常实例。当异常处理程序相互嵌套时,只有最内层处理程序处理的异常才可访问。

如果没有正在执行的异常处理程序,则此函数返回 None

3.11 版本中新增。

sys.exc_info()

此函数返回已处理异常的旧式表示形式。如果当前正在处理异常 e(因此 exception() 将返回 e),exc_info() 将返回元组 (type(e), e, e.__traceback__)。也就是说,一个包含异常类型(BaseException 的子类)、异常本身以及一个 回溯对象 的元组,该回溯对象通常封装了异常最后发生时的调用堆栈。

如果堆栈上的任何位置都没有正在处理的异常,则此函数返回一个包含三个 None 值的元组。

在 3.11 版本中更改: typetraceback 字段现在从 value(异常实例)派生,因此当在处理异常时修改异常时,更改会反映在随后对 exc_info() 的调用结果中。

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 的版本号,例如 3.2

注解

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

sys.executable

一个字符串,给出 Python 解释器的可执行二进制文件的绝对路径,在系统允许的情况下。如果 Python 无法检索到其可执行文件的真实路径,则 sys.executable 将是一个空字符串或 None

sys.exit([arg])

引发 SystemExit 异常,表示退出解释器的意图。

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

由于 exit() 最终“仅仅”引发一个异常,它只会在从主线程调用且异常未被拦截时才会退出进程。 try 语句的 finally 子句指定的清理操作会被执行,并且有可能在外部层级拦截退出尝试。

在 3.6 版本中更改: 如果 Python 解释器捕获 SystemExit 之后,在清理过程中发生错误(例如,刷新标准流中缓冲的数据时发生错误),则退出状态会更改为 120。

sys.flags

命名元组 flags 公开了命令行标志的状态。 这些属性是只读的。

flags.debug

-d

flags.inspect

-i

flags.interactive

-i

flags.isolated

-I

flags.optimize

-O-OO

flags.dont_write_bytecode

-B

flags.no_user_site

-s

flags.no_site

-S

flags.ignore_environment

-E

flags.verbose

-v

flags.bytes_warning

-b

flags.quiet

-q

flags.hash_randomization

-R

flags.dev_mode

-X dev (Python 开发模式)

flags.utf8_mode

-X utf8

flags.safe_path

-P

flags.int_max_str_digits

-X int_max_str_digits (整数转换为字符串的长度限制)

flags.warn_default_encoding

-X warn_default_encoding

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

在 3.2.3 版本中添加: hash_randomization 属性。

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

在 3.4 版本中更改: -I isolated 标志添加了 isolated 属性。

在 3.7 版本中更改: 为新的 Python 开发模式 添加了 dev_mode 属性,并为新的 -X utf8 标志添加了 utf8_mode 属性。

在 3.10 版本中更改: -X warn_default_encoding 标志添加了 warn_default_encoding 属性。

在 3.11 版本中更改: -P 选项添加了 safe_path 属性。

在 3.11 版本中更改: 添加了 int_max_str_digits 属性。

sys.float_info

一个 命名元组,其中包含有关浮点类型的信息。它包含关于精度和内部表示的底层信息。这些值对应于 'C' 编程语言的标准头文件 float.h 中定义的各种浮点常量;有关详细信息,请参阅 1999 ISO/IEC C 标准 [C99] 的 5.2.4.2.2 节“浮点类型的特性”。

float_info 命名元组 的属性

属性

float.h 宏

解释

float_info.epsilon

DBL_EPSILON

1.0 和大于 1.0 且可以表示为浮点数的最小数值之间的差值。

另请参阅 math.ulp()

float_info.dig

DBL_DIG

可以在浮点数中忠实表示的最大十进制位数;请参见下文。

float_info.mant_dig

DBL_MANT_DIG

浮点精度:浮点数的有效数中基数-radix 的位数。

float_info.max

DBL_MAX

可表示的最大正有限浮点数。

float_info.max_exp

DBL_MAX_EXP

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

float_info.max_10_exp

DBL_MAX_10_EXP

使得 10**e 在可表示的有限浮点数范围内的最大整数 e

float_info.min

DBL_MIN

可表示的最小正 *标准化* 浮点数。

使用 math.ulp(0.0) 获取最小的正 *非标准化* 可表示浮点数。

float_info.min_exp

DBL_MIN_EXP

使得 radix**(e-1) 是一个标准化浮点数的最小整数 e

float_info.min_10_exp

DBL_MIN_10_EXP

使得 10**e 是一个标准化浮点数的最小整数 e

float_info.radix

FLT_RADIX

指数表示的基数。

float_info.rounds

FLT_ROUNDS

一个整数,表示浮点算术的舍入模式。 这反映了解释器启动时系统 FLT_ROUNDS 宏的值。

  • -1: 无法确定

  • 0: 向零取整

  • 1: 向最接近的整数取整

  • 2: 向正无穷取整

  • 3: 向负无穷取整

对于 FLT_ROUNDS 的所有其他值,都表示实现定义的舍入行为。

属性 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) 的行为与 Python 3.1 之前的版本相同。

在 3.1 版本中加入。

sys.getallocatedblocks()

返回解释器当前分配的内存块的数量,无论其大小如何。此函数主要用于跟踪和调试内存泄漏。由于解释器的内部缓存,结果可能因调用而异;您可能需要调用 _clear_internal_caches()gc.collect() 以获得更可预测的结果。

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

在 3.4 版本中加入。

sys.getunicodeinternedsize()

返回已被驻留的 Unicode 对象数量。

在 3.12 版本中加入。

sys.getandroidapilevel()

以整数形式返回 Android 的构建时 API 级别。这表示此 Python 构建可以运行的 Android 的最低版本。有关运行时版本信息,请参阅 platform.android_ver()

可用性:Android。

3.7 版本中新增。

sys.getdefaultencoding()

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

sys.getdlopenflags()

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

可用性:Unix。

sys.getfilesystemencoding()

获取文件系统编码:与文件系统错误处理程序一起使用的编码,用于在 Unicode 文件名和字节文件名之间进行转换。文件系统错误处理程序从 getfilesystemencodeerrors() 返回。

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

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

文件系统编码和错误处理程序在 Python 启动时由 PyConfig_Read() 函数配置:请参阅 filesystem_encodingfilesystem_errors PyConfig 的成员。

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

在 3.6 版本中更改: 不再保证 Windows 返回 'mbcs'。有关更多信息,请参阅 PEP 529_enablelegacywindowsfsencoding()

在 3.7 版本中更改: 如果启用了Python UTF-8 模式,则返回 'utf-8'

sys.getfilesystemencodeerrors()

获取文件系统错误处理程序:与文件系统编码一起使用的错误处理程序,用于在 Unicode 文件名和字节文件名之间进行转换。文件系统编码从 getfilesystemencoding() 返回。

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

文件系统编码和错误处理程序在 Python 启动时由 PyConfig_Read() 函数配置:请参阅 filesystem_encodingfilesystem_errors PyConfig 的成员。

在 3.6 版本中加入。

sys.get_int_max_str_digits()

返回 整数字符串转换长度限制的当前值。另请参阅 set_int_max_str_digits()

3.11 版本中新增。

sys.getrefcount(object)

返回 *object* 的引用计数。返回的计数通常比您预期的要高 1,因为它包括作为 getrefcount() 参数的(临时)引用。

请注意,返回的值可能实际上并不反映实际持有对象的引用数量。例如,某些对象是不朽的,并且具有非常高的引用计数,这并不反映实际的引用数量。因此,不要依赖返回的值是准确的,除了值 0 或 1 之外。

在 3.12 版本中更改: 不朽的对象具有非常大的引用计数,这与对象的实际引用数量不匹配。

sys.getrecursionlimit()

返回递归限制的当前值,即 Python 解释器堆栈的最大深度。此限制可防止无限递归导致 C 堆栈溢出并使 Python 崩溃。可以通过 setrecursionlimit() 设置此限制。

sys.getsizeof(object[, default])

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

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

如果给定 default,则当对象没有提供检索大小的方法时,将返回该值。否则,将引发 TypeError 异常。

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

有关递归使用 getsizeof() 来查找容器及其所有内容大小的示例,请参阅 递归 sizeof 食谱

sys.getswitchinterval()

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

3.2 版本加入。

sys._getframe([depth])

从调用堆栈返回一个帧对象。如果给定可选整数 depth,则返回堆栈顶部以下那么多调用的帧对象。如果深度超过调用堆栈,则引发 ValueError 异常。depth 的默认值为零,返回调用堆栈顶部的帧。

引发一个 审计事件 sys._getframe,其参数为 frame

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

sys._getframemodulename([depth])

从调用堆栈返回模块的名称。如果给定可选整数 depth,则返回堆栈顶部以下那么多调用的模块。如果深度超过调用堆栈,或者如果模块无法识别,则返回 Nonedepth 的默认值为零,返回调用堆栈顶部的模块。

引发一个 审计事件 sys._getframemodulename,其参数为 depth

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

sys.getobjects(limit[, type])

仅当 CPython 使用专门的配置选项 --with-trace-refs 构建时,此函数才存在。它仅用于调试垃圾回收问题。

返回最多 limit 个动态分配的 Python 对象的列表。如果给定 type,则仅包含该精确类型(而不是子类型)的对象。

列表中的对象不安全使用。具体来说,结果将包括来自所有共享其对象分配器状态的解释器的对象(即,使用 PyInterpreterConfig.use_main_obmalloc 设置为 1 或使用 Py_NewInterpreter() 创建的,以及主解释器)。混合来自不同解释器的对象可能会导致崩溃或其他意外行为。

CPython 实现细节: 此函数仅应用于专门用途。不能保证它存在于所有 Python 实现中。

在 3.13.1 版本中更改: 结果可能包含来自其他解释器的对象。

sys.getprofile()

获取由 setprofile() 设置的性能分析器函数。

sys.gettrace()

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

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

sys.getwindowsversion()

返回一个命名元组,描述当前运行的 Windows 版本。命名元素为 majorminorbuildplatformservice_packservice_pack_minorservice_pack_majorsuite_maskproduct_typeplatform_versionservice_pack 包含一个字符串,platform_version 包含一个 3 元组,所有其他值都是整数。这些组件也可以通过名称访问,因此 sys.getwindowsversion()[0] 等效于 sys.getwindowsversion().major。为了与以前的版本兼容,只能通过索引检索前 5 个元素。

platform 将为 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 返回当前操作系统的主要版本、次要版本和构建号,而不是为进程模拟的版本。它旨在用于日志记录,而不是用于功能检测。

注解

platform_version 从 kernel32.dll 派生版本,该版本可能与操作系统版本不同。请使用 platform 模块以获得准确的操作系统版本。

可用性:Windows。

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

在 3.6 版本中更改: 添加了 platform_version

sys.get_asyncgen_hooks()

返回一个 asyncgen_hooks 对象,该对象类似于 namedtuple 的形式 (firstiter, finalizer),其中 firstiterfinalizer 预计为 None 或函数,它们接受一个 异步生成器迭代器 作为参数,并用于通过事件循环计划异步生成器的最终化。

在 3.6 版本中添加: 有关更多详细信息,请参阅 PEP 525

注解

此函数是在临时基础上添加的(有关详细信息,请参阅 PEP 411。)

sys.get_coroutine_origin_tracking_depth()

获取由 set_coroutine_origin_tracking_depth() 设置的当前协程来源跟踪深度。

3.7 版本中新增。

注解

此函数是在临时基础上添加的(有关详细信息,请参阅 PEP 411。)仅将其用于调试目的。

sys.hash_info

一个具名元组,提供数值哈希实现的参数。关于数值类型的哈希的更多详细信息,请参阅数值类型的哈希

hash_info.width

用于哈希值的比特宽度

hash_info.modulus

用于数值哈希方案的素数模数 P

hash_info.inf

为正无穷返回的哈希值

hash_info.nan

(此属性不再使用)

hash_info.imag

用于复数虚部的乘数

hash_info.algorithm

用于字符串、字节和内存视图哈希的算法名称

hash_info.hash_bits

哈希算法的内部输出大小

hash_info.seed_bits

哈希算法的种子密钥的大小

3.2 版本加入。

在 3.4 版本中变更: 添加了 algorithmhash_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() 函数时才真正有意义。具名元组 sys.version_info 可用于以更友好的方式编码相同的信息。

有关 hexversion 的更多详细信息,请参见 API 和 ABI 版本控制

sys.implementation

一个包含有关当前正在运行的 Python 解释器的实现信息的对象。以下属性必须存在于所有 Python 实现中。

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

version 是一个具名元组,格式与 sys.version_info 相同。它表示 Python 实现的版本。这与当前运行的解释器所符合的特定 Python 语言的版本具有不同的含义,而 sys.version_info 表示的是 Python 语言的版本。例如,对于 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,它们的值相同,因为它是参考实现。

hexversion 是十六进制格式的实现版本,如 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

一个具名元组,其中包含有关 Python 的整数内部表示的信息。这些属性是只读的。

int_info.bits_per_digit

每个数字中包含的比特数。Python 整数在内部以 2**int_info.bits_per_digit 为底存储。

int_info.sizeof_digit

用于表示数字的 C 类型的大小(以字节为单位)。

int_info.default_max_str_digits

当未以其他方式显式配置时,sys.get_int_max_str_digits() 的默认值。

int_info.str_digits_check_threshold

sys.set_int_max_str_digits()PYTHONINTMAXSTRDIGITS-X int_max_str_digits 的最小非零值。

在 3.1 版本中加入。

在 3.11 版本中变更: 添加了 default_max_str_digitsstr_digits_check_threshold

sys.__interactivehook__

当此属性存在时,当解释器在交互模式下启动时,会自动调用其值(不带参数)。这是在读取 PYTHONSTARTUP 文件之后完成的,因此您可以在那里设置此钩子。site 模块 设置此项

当在启动时调用钩子时,会使用钩子对象作为参数引发 审计事件 cpython.run_interactivehook

在 3.4 版本中加入。

sys.intern(string)

string 输入到“interned”字符串的表中,并返回 interned 字符串 —— 它是 string 本身或副本。interned 字符串对于在字典查找中获得一点性能很有用 —— 如果字典中的键是 interned 的,并且查找键是 interned 的,则键比较(在哈希之后)可以通过指针比较而不是字符串比较来完成。通常,Python 程序中使用的名称会自动 interned,并且用于保存模块、类或实例属性的字典具有 interned 键。

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

sys._is_gil_enabled()

如果 True 启用 GIL,则返回 True,如果禁用,则返回 False

3.13 版本中新增。

sys.is_finalizing()

如果主 Python 解释器正在 关闭,则返回 True。 否则返回 False

另请参见 PythonFinalizationError 异常。

在 3.5 版本中添加。

sys.last_exc

此变量并非始终定义;当异常未被处理且解释器打印错误消息和堆栈回溯时,它会设置为异常实例。其目的是允许交互式用户导入调试器模块并进行事后调试,而无需重新执行导致错误的命令。(典型的用法是 import pdb; pdb.pm() 进入事后调试器;有关更多信息,请参见 pdb 模块。)

在 3.12 版本中加入。

sys._is_interned(string)

如果给定的字符串是“interned”的,则返回 True,否则返回 False

3.13 版本中新增。

CPython 实现细节: 它不保证存在于 Python 的所有实现中。

sys.last_type
sys.last_value
sys.last_traceback

这三个变量已弃用;请改用 sys.last_exc。它们保存了从上面的 exc_info() 返回的 sys.last_exc 的旧表示形式。

sys.maxsize

一个整数,给出 Py_ssize_t 类型变量可以采用的最大值。在 32 位平台上通常是 2**31 - 1,在 64 位平台上是 2**63 - 1

sys.maxunicode

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

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

sys.meta_path

一个 元路径查找器 对象的列表,这些对象调用它们的 find_spec() 方法,以查看其中一个对象是否可以找到要导入的模块。默认情况下,它包含实现 Python 默认导入语义的条目。find_spec() 方法至少使用要导入的模块的绝对名称调用。如果要导入的模块包含在包中,则父包的 __path__ 属性将作为第二个参数传入。该方法返回一个 模块规范,如果找不到该模块,则返回 None

另请参阅

importlib.abc.MetaPathFinder

定义 meta_path 上查找器对象接口的抽象基类。

importlib.machinery.ModuleSpec

find_spec() 应该返回其实例的具体类。

在 3.4 版本中更改: 模块规范 在 Python 3.4 中由 PEP 451 引入。

在 3.12 版本中更改: 如果 meta_path 条目没有 find_spec() 方法,则删除查找 find_module() 方法的回退。

sys.modules

这是一个将模块名称映射到已加载模块的字典。可以对其进行操作以强制重新加载模块和其他技巧。但是,替换字典不一定会按预期工作,并且从字典中删除基本项可能会导致 Python 失败。如果你想迭代这个全局字典,请始终使用 sys.modules.copy()tuple(sys.modules) 来避免异常,因为它的在迭代过程中,大小可能会因其他线程中的代码或活动而发生变化。

sys.orig_argv

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

sys.orig_argv 的元素是 Python 解释器的参数,而 sys.argv 的元素是用户程序的参数。解释器本身使用的参数将出现在 sys.orig_argv 中,而在 sys.argv 中缺失。

在 3.10 版本中添加。

sys.path

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

默认情况下,在程序启动时初始化,一个可能不安全的路径会添加到 sys.path 的开头(在作为 PYTHONPATH 的结果插入的条目之前

  • python -m module 命令行:将当前工作目录添加到开头。

  • 命令行 python script.py:会把脚本所在的目录添加到路径中。如果它是符号链接,则会解析符号链接。

  • 命令行 python -c codepython (REPL):会添加一个空字符串,这意味着当前工作目录。

为了不添加这个可能不安全的路径,请使用 -P 命令行选项或 PYTHONSAFEPATH 环境变量。

程序可以自由地修改此列表以用于自己的目的。只有字符串应该被添加到 sys.path 中;所有其他数据类型在导入时会被忽略。

另请参阅

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

sys.path_hooks

一个可调用对象的列表,它接受一个路径参数来尝试为该路径创建一个 finder。如果可以创建 finder,则由可调用对象返回,否则引发 ImportError

最初在 PEP 302 中指定。

sys.path_importer_cache

一个字典,充当 finder 对象的缓存。键是传递给 sys.path_hooks 的路径,值是找到的 finder。如果路径是有效的文件系统路径,但在 sys.path_hooks 上没有找到 finder,则存储 None

最初在 PEP 302 中指定。

sys.platform

一个包含平台标识符的字符串。已知的值有

系统

platform

AIX

'aix'

Android

'android'

Emscripten

'emscripten'

iOS

'ios'

Linux

'linux'

macOS

'darwin'

Windows

'win32'

Windows/Cygwin

'cygwin'

WASI

'wasi'

在表中未列出的 Unix 系统上,该值是由 uname -s 返回的操作系统名称的小写形式,并附加由 uname -r 返回的版本的第一部分,例如 'sunos5''freebsd8'在构建 Python 时。除非你想测试特定的系统版本,否则建议使用以下习惯用法

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

在 3.3 版本中变更: 在 Linux 上,sys.platform 不再包含主版本号。它始终为 'linux',而不是 'linux2''linux3'

在 3.8 版本中变更: 在 AIX 上,sys.platform 不再包含主版本号。它始终为 'aix',而不是 'aix5''aix7'

在 3.13 版本中变更: 在 Android 上,sys.platform 现在返回 'android' 而不是 'linux'

另请参阅

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

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

sys.platlibdir

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

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

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

  • /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 文件安装的特定于站点的目录前缀;在 Unix 上,默认值为 /usr/local。这可以在构建时使用 --prefix 参数设置给 configure 脚本。有关派生路径,请参阅 安装路径

注解

如果 虚拟环境 生效,则此值将在 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)。

可用性:Unix。

sys.set_int_max_str_digits(maxdigits)

设置此解释器使用的 整数字符串转换长度限制。 另请参阅 get_int_max_str_digits()

3.11 版本中新增。

sys.setprofile(profilefunc)

设置系统的性能分析函数,允许你在 Python 中实现 Python 源代码的性能分析器。有关 Python 性能分析器的更多信息,请参阅 Python 性能分析器 一章。系统性能分析函数的调用方式类似于系统跟踪函数(请参阅 settrace()),但它的调用事件不同,例如,它不会为执行的每一行代码调用(仅在调用和返回时调用,但即使已设置异常,也会报告返回事件)。该函数是线程特定的,但性能分析器无法知道线程之间的上下文切换,因此在存在多个线程的情况下使用它没有意义。此外,它的返回值不被使用,因此它可以简单地返回 None。性能分析函数中的错误会导致其自身被取消设置。

注解

settrace() 一样,setprofile() 也使用相同的跟踪机制。若要在跟踪函数(例如在调试器断点中)内使用 setprofile() 跟踪调用,请参阅 call_tracing()

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

这些事件的含义如下:

'call'

调用一个函数(或进入其他代码块)。调用性能分析函数;argNone

'return'

一个函数(或其他代码块)即将返回。调用性能分析函数;arg 是将要返回的值,如果事件是由引发的异常引起的,则为 None

'c_call'

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

'c_return'

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

'c_exception'

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

引发一个 审计事件 sys.setprofile,不带任何参数。

sys.setrecursionlimit(limit)

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

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

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

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

sys.setswitchinterval(interval)

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

3.2 版本加入。

sys.settrace(tracefunc)

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

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

每当进入新的本地作用域时,都会调用跟踪函数(event 设置为 'call');它应该返回一个用于新作用域的本地跟踪函数的引用,或者如果作用域不应被跟踪,则返回 None

本地跟踪函数应返回对其自身的引用,或返回另一个函数的引用,该函数随后将用作作用域的本地跟踪函数。

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

注解

在调用跟踪函数时禁用跟踪(例如,由 settrace() 设置的函数)。对于递归跟踪,请参阅 call_tracing()

这些事件的含义如下:

'call'

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

'line'

解释器即将执行新的一行代码或重新执行循环的条件。调用本地跟踪函数;argNone;返回值指定新的本地跟踪函数。有关其工作原理的详细说明,请参阅 Objects/lnotab_notes.txt。通过将 f_trace_lines 设置为 False,可以禁用该 的逐行事件。

'return'

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

'exception'

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

'opcode'

解释器即将执行新的操作码(有关操作码详细信息,请参阅 dis)。调用本地跟踪函数;argNone;返回值指定新的本地跟踪函数。默认情况下不发出逐操作码事件:必须通过将该 上的 f_trace_opcodes 设置为 True 来显式请求它们。

请注意,当异常向下传播到调用者链时,每个级别都会生成一个 'exception' 事件。

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

有关代码和帧对象的更多信息,请参阅 标准类型层级结构

引发不带任何参数的 审计事件 sys.settrace

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

在 3.7 版本中变更: 添加了 'opcode' 事件类型;向帧添加了 f_trace_linesf_trace_opcodes 属性

sys.set_asyncgen_hooks([firstiter] [, finalizer])

接受两个可选的关键字参数,它们是可调用对象,接受一个 异步生成器迭代器 作为参数。当异步生成器首次被迭代时,将调用 firstiter 可调用对象。当异步生成器即将被垃圾回收时,将调用 finalizer 可调用对象。

引发不带任何参数的 审计事件 sys.set_asyncgen_hooks_firstiter

引发不带任何参数的 审计事件 sys.set_asyncgen_hooks_finalizer

由于底层 API 由两个调用组成,每个调用都必须引发自己的事件,因此会引发两个审计事件。

3.6 版本中新增:有关更多详细信息,请参阅 PEP 525 ,有关 finalizer 方法的参考示例,请参阅 Lib/asyncio/base_events.pyasyncio.Loop.shutdown_asyncgens 的实现

注解

此函数已在临时基础上添加(有关详细信息,请参阅 PEP 411。)

sys.set_coroutine_origin_tracking_depth(depth)

允许启用或禁用协程来源跟踪。启用后,协程对象的 cr_origin 属性将包含一个元组,其中包含 (文件名、行号、函数名称) 元组,描述创建协程对象的回溯,最近的调用在前。禁用后,cr_origin 将为 None

要启用,请传递一个大于零的 depth 值;这将设置将捕获其信息的帧数。要禁用,请将 depth 设置为零。

此设置是线程特定的。

3.7 版本中新增。

注解

此函数已在临时基础上添加(有关详细信息,请参阅 PEP 411。)仅将其用于调试目的。

sys.activate_stack_trampoline(backend, /)

激活堆栈分析器 trampoline backend。唯一支持的后端是 "perf"

可用性:Linux。

在 3.12 版本中加入。

sys.deactivate_stack_trampoline()

停用当前的堆栈分析器 trampoline 后端。

如果没有激活堆栈分析器,则此函数无效。

可用性:Linux。

在 3.12 版本中加入。

sys.is_stack_trampoline_active()

如果堆栈分析器 trampoline 处于活动状态,则返回 True

可用性:Linux。

在 3.12 版本中加入。

sys._enablelegacywindowsfsencoding()

文件系统编码和错误处理程序 分别更改为 'mbcs' 和 'replace',以与 3.6 之前的 Python 版本保持一致。

这等效于在启动 Python 之前定义 PYTHONLEGACYWINDOWSFSENCODING 环境变量。

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

可用性:Windows。

注解

在 Python 启动后更改文件系统编码是危险的,因为旧的 fsencoding 或由旧的 fsencoding 编码的路径可能会缓存在某个地方。请改用 PYTHONLEGACYWINDOWSFSENCODING

3.6 版本中新增:有关更多详细信息,请参阅 PEP 529

自 3.13 版本起已弃用,将在 3.16 版本中删除:请改用 PYTHONLEGACYWINDOWSFSENCODING

sys.stdin
sys.stdout
sys.stderr

解释器用于标准输入、输出和错误的 文件对象

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

  • stdout 用于 print()表达式 语句的输出以及 input() 的提示;

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

这些流是常规的 文本文件,类似于 open() 函数返回的文件。它们的参数按如下方式选择

  • 编码和错误处理程序是从 PyConfig.stdio_encodingPyConfig.stdio_errors 初始化。

    在 Windows 上,UTF-8 用于控制台设备。非字符设备(如磁盘文件和管道)使用系统区域设置编码(即 ANSI 代码页)。非控制台字符设备(如 NUL,即 isatty() 返回 True 的情况)在启动时分别使用控制台输入和输出代码页的值,分别用于 stdin 和 stdout/stderr。如果进程最初未附加到控制台,则默认为系统 区域设置编码

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

    在所有平台上,您可以通过在启动 Python 之前设置 PYTHONIOENCODING 环境变量,或使用新的 -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 启动的 Python 应用程序中。

sys.stdlib_module_names

一个冻结的字符串集合,其中包含标准库模块的名称。

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

对于包,仅列出主包:不列出子包和子模块。例如,列出 email 包,但不列出 email.mime 子包和 email.message 子模块。

另请参阅 sys.builtin_module_names 列表。

在 3.10 版本中添加。

sys.thread_info

一个 命名元组,其中包含有关线程实现的信息。

thread_info.name

线程实现的名称

  • "nt":Windows 线程

  • "pthread":POSIX 线程

  • "pthread-stubs":存根 POSIX 线程(在没有线程支持的 WebAssembly 平台上)

  • "solaris":Solaris 线程

thread_info.lock

锁实现的名称

  • "semaphore":锁使用信号量

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

  • 如果此信息未知,则为 None

thread_info.version

线程库的名称和版本。它是一个字符串,如果此信息未知,则为 None

3.3 版本中新增。

sys.tracebacklimit

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

sys.unraisablehook(unraisable, /)

处理无法引发的异常。

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

unraisable 参数具有以下属性

  • exc_type:异常类型。

  • exc_value:异常值,可以为 None

  • exc_traceback:异常回溯,可以为 None

  • err_msg:错误消息,可以为 None

  • object:导致异常的对象,可以为 None

默认钩子将 err_msgobject 格式化为:f'{err_msg}: {object!r}';如果 err_msgNone,则使用“Exception ignored in”错误消息。

可以覆盖 sys.unraisablehook() 来控制如何处理无法引发的异常。

另请参阅

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

警告

使用自定义钩子存储 exc_value 可能会创建引用循环。当不再需要异常时,应显式清除它以打破引用循环。

使用自定义钩子存储 object 可能会在将其设置为正在被最终化的对象时复活它。避免在自定义钩子完成后存储 object,以避免复活对象。

当发生无法处理的异常时,使用参数 hook, unraisable 引发审计事件 sys.unraisablehookunraisable 对象与将传递给钩子的对象相同。如果未设置钩子,则 hook 可能为 None

3.8 版本加入。

sys.version

一个包含 Python 解释器版本号以及构建号和所用编译器附加信息的字符串。当启动交互式解释器时会显示此字符串。不要从中提取版本信息,而应使用 version_info 以及 platform 模块提供的函数。

sys.api_version

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

sys.version_info

一个包含版本号五个组成部分的元组:majorminormicroreleaselevelserial。除了 releaselevel 之外,所有值都是整数;发布级别为 '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 框架的实现细节;请勿修改此值。有关 warnings 框架的更多信息,请参阅 warnings 模块。

sys.winver

用于在 Windows 平台上构成注册表键的版本号。它以字符串资源 1000 的形式存储在 Python DLL 中。该值通常是正在运行的 Python 解释器的主版本号和次版本号。它在 sys 模块中提供,用于信息目的;修改此值不会影响 Python 使用的注册表键。

可用性:Windows。

sys.monitoring

包含用于注册回调和控制监控事件的函数和常量的命名空间。有关详细信息,请参阅 sys.monitoring

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 实现细节: 这是访问通过 -X 传递的选项的 CPython 特定方法。其他实现可能会通过其他方式导出它们,或者根本不导出。

3.2 版本加入。

引文

[C99]

ISO/IEC 9899:1999。“编程语言 – C。” 此标准的公开草案可在 https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 上找到。