Skip to main content

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 相同的值。如果没有在 虚拟环境 中运行,值将保持不变;如果 site.py 发现虚拟环境正在使用,则 prefixexec_prefix 的值将更改为指向虚拟环境,而 base_prefixbase_exec_prefix 将保持指向基本Python安装(创建虚拟环境的那个) 。

3.3 新版功能.

sys.base_prefix

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

3.3 新版功能.

sys.byteorder

本地字节顺序的指示符。这将在大端(最高有效字节优先)平台上具有值 'big',而在小端(最低有效字节优先)平台上具有值 'little'

sys.builtin_module_names

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

sys.call_tracing(func, args)

调用 func(*args),而启用跟踪。跟踪状态被保存,然后被恢复。这旨在从调试器从检查点调用,以递归调试一些其他代码。

sys.copyright

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

sys._clear_type_cache()

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

此函数仅用于内部和专用目的。

sys._current_frames()

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

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

此函数仅用于内部和专用目的。

sys._debugmallocstats()

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

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

3.3 新版功能.

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

sys.dllhandle

整数指定Python DLL的句柄。可用性:Windows。

sys.displayhook(value)

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

对在交互式Python会话中输入的 expression 求值的结果调用 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.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)。它们的含义是:type 获取正在处理的异常的类型(BaseException 的子类); value 获取异常实例(异常类型的实例); traceback 获取一个跟踪对象(参见参考手册),它将调用堆栈封装在异常最初发生的点。

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])

退出Python。这是通过提高 SystemExit 异常来实现的,因此尊重由 try 语句的finally子句指定的清除操作,并且可以在外部级别拦截退出尝试。

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

由于 exit() 最终只有“only”引发异常,它将只在从主线程调用时退出该进程,并且异常不会被拦截。

在 3.6 版更改: 如果在Python解释器捕获到 SystemExit 之后在清除中出现错误(例如在标准流中刷新缓冲数据时出错),则退出状态将更改为120。

sys.flags

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

属性

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

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

属性

float.h宏

说明

epsilon

DBL_EPSILON

1和大于1的最小值之间的差可表示为浮点

dig

DBL_DIG

可在浮点中忠实表示的最小十进制数字位数;见下文

mant_dig

DBL_MANT_DIG

float precision:float的有效位数中的base-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

最小正归一化浮动

min_exp

DBL_MIN_EXP

最小整数e,使得 radix**(e-1) 是归一化浮点

min_10_exp

DBL_MIN_10_EXP

最小整数e,使得 10**e 是归一化浮点

radix

FLT_RADIX

指数表示的基数

rounds

FLT_ROUNDS

表示用于算术运算的舍入模式的整数常数。这反映了解释器启动时系统FLT_ROUNDS宏的值。有关可能的值及其含义的说明,请参见C99标准的第5.2.4.2.2节。

属性 sys.float_info.dig 需要进一步解释。如果 s 是任何表示十进制数字且最多有 sys.float_info.dig 有效数字的字符串,则将 s 转换为浮点并再次返回将恢复代表相同十进制值的字符串:

>>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979'    # decimal string with 15 significant digits
>>> format(float(s), '.15g')  # convert to float and back -> same value
'3.14159265358979'

但对于超过 sys.float_info.dig 有效数字的字符串,这并不总是真的:

>>> s = '9876543211234567'    # 16 significant digits is too many!
>>> format(float(s), '.16g')  # conversion changes value
'9876543211234568'
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文件名和字节文件名之间转换的编码的名称。为了获得最佳兼容性,在所有情况下都应使用str作为文件名,但也支持以字节表示文件名。接受或返回文件名的函数应支持str或字节,并在内部转换为系统的首选表示。

此编码始终与ASCII兼容。

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

  • 在Mac OS X上,编码为 'utf-8'

  • 在Unix上,编码是区域设置编码。

  • 在Windows上,编码可以是 'utf-8''mbcs',具体取决于用户配置。

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

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

sys.getfilesystemencodeerrors()

返回用于在Unicode文件名和字节文件名之间转换的错误模式的名称。编码名称从 getfilesystemencoding() 返回。

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

3.6 新版功能.

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])

从调用堆栈返回一个框架对象。如果给出了可选的整数 depth,则返回在堆栈顶部下面的许多调用的帧对象。如果它比调用堆栈深,则会引发 ValueErrordepth 的默认值为零,返回调用堆栈顶部的帧。

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

sys.getprofile()

获取由 setprofile() 设置的分析器功能。

sys.gettrace()

获取由 settrace() 设置的跟踪功能。

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() 函数;有关这些字段的详细信息,请参阅有关 OSVERSIONINFOEX() 的Microsoft文档。

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

可用性:Windows。

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

在 3.6 版更改: 添加 platform_version

sys.get_asyncgen_hooks()

返回 asyncgen_hooks 对象,其类似于 (firstiter, finalizer) 形式的 namedtuple,其中 firstiterfinalizer 预期是 None 或者以 asynchronous generator iterator 作为参数的函数,并且用于通过事件循环来调度异步发生器的最终化。

3.6 新版功能: 有关详细信息,请参阅 PEP 525

注解

此功能已作为临时添加(有关详细信息,请参阅 PEP 411)。

sys.get_coroutine_wrapper()

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

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

注解

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

sys.hash_info

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

属性

说明

width

用于哈希值的比特宽度

modulus

用于数值散列方案的素数模数P.

inf

为正无穷大返回的散列值

nan

返回的哈希值

imag

乘法器用于复数的虚部

algorithm

str,bytes和memoryview的哈希算法的名称

hash_bits

内部输出大小的哈希算法

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() 功能的结果。 struct sequence sys.version_info 可以用于更人性化的相同信息的编码。

更多细节的 hexversion 可以在 API和ABI版本控制 找到。

sys.implementation

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

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

version 是一个命名的元组,格式与 sys.version_info 相同。它代表Python implementation 的版本。这与当前运行的解释器符合的,sys.version_info 所代表的特定版本的Python language 有不同的含义。例如,对于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 新版功能.

sys.int_info

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

属性

说明

bits_per_digit

每个数字中保存的位数。 Python整数存储在基本 2**int_info.bits_per_digit 内部

sizeof_digit

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

3.1 新版功能.

sys.__interactivehook__

当此属性存在时,在 交互模式 中启动解释器时,将自动调用其值(无参数)。这是在 PYTHONSTARTUP 文件被读取之后完成的,这样你可以在这里设置这个钩子。 site 模块 设置这个

3.4 新版功能.

sys.intern(string)

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

内置的字符串不是不朽的;您必须参考 intern() 的回报价值,从中受益。

sys.is_finalizing()

如果Python解释器是 关闭,则返回 True,否则返回 False

3.5 新版功能.

sys.last_type
sys.last_value
sys.last_traceback

这三个变量并不总是定义的;它们在未处理异常时设置,并且解释器输出错误消息和堆栈跟踪。它们的预期用途是允许交互式用户导入调试器模块并进行事后调试,而无需重新执行导致错误的命令。 (典型用法是 import pdb; pdb.pm() 进入事后调试器;有关详细信息,请参阅 pdb 模块。

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

sys.maxsize

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

sys.maxunicode

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

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

sys.meta_path

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

参见

importlib.abc.MetaPathFinder

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

importlib.machinery.ModuleSpec

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

在 3.4 版更改: 模块规格PEP 451 在Python 3.4中引入。早期版本的Python寻找一个名为 find_module() 的方法。如果 meta_path 条目不具有 find_spec() 方法,则这仍被称为后退。

sys.modules

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

sys.path

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

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

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

参见

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

sys.path_hooks

使用路径参数尝试为路径创建 finder 的可调用项列表。如果可以创建一个finder,它将被callable返回,否则raise ImportError

最初在 PEP 302 中指定。

sys.path_importer_cache

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

最初在 PEP 302 中指定。

在 3.3 版更改: 当找不到finder时,存储 None 而不是 imp.NullImporter

sys.platform

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

对于Unix系统,除了在Linux上,这是由 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...

对于其他系统,值为:

系统

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 参数设置。 Python库模块的主集合安装在目录 prefix/lib/pythonX.Y 中,而平台独立的头文件(除了 pyconfig.h)存储在 prefix/include/pythonX.Y 中,其中 X.Y 是Python的版本号,例如 3.2

注解

如果 虚拟环境 有效,则该值将在 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分析器的更多信息,请参阅 Python分析器 章节。系统的配置文件函数的调用类似于系统的跟踪函数(参见 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 取决于事件类型。

每当输入新的局部作用域时,跟踪功能被调用(event 设置为 'call')它应该返回对要使用该范围的本地跟踪函数的引用,如果不应该跟踪范围,则返回 None

本地跟踪函数应该返回对自身(或另一个函数用于在该范围中进一步跟踪)的引用,或 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' 事件。

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

settrace() 功能仅用于实现调试器,分析器,覆盖工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能不会在所有Python实现中可用。

sys.set_asyncgen_hooks(firstiter, finalizer)

接受两个可选的关键字参数,它们是接受 asynchronous generator iterator 作为参数的可调用项。当第一次迭代异步生成器时,将调用 firstiter 可调用。当异步生成器将要被垃圾收集时,finalizer 将被调用。

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

注解

此功能已作为临时添加(有关详细信息,请参阅 PEP 411)。

sys.set_coroutine_wrapper(wrapper)

允许拦截 coroutine 对象的创建(只有由 async def 函数创建的对象;用 types.coroutine()asyncio.coroutine() 修饰的生成器不会被拦截)。

wrapper 参数必须是:

  • 接受一个参数(协同对象)的可调用;

  • None,以重置包装器。

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

wrapper 可调用程序不能直接或间接定义新的协同程序:

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._enablelegacywindowsfsencoding()

将默认文件系统编码和错误模式分别更改为“mbcs”和“replace”,以便与3.6之前的Python版本保持一致。

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

可用性:Windows

3.6 新版功能: 有关详细信息,请参阅 PEP 529

sys.stdin
sys.stdout
sys.stderr

文件对象 由解释器用于标准输入,输出和错误:

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

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

  • 解释器自己的提示和它的错误消息去 stderr

这些流是常规 文本文件,类似于由 open() 功能返回的那些流。它们的参数选择如下:

  • 字符编码是平台相关的。在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* 对象是否被重定向。

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

注解

在一些条件下,stdinstdoutstderr 以及原始值 __stdin____stdout____stderr__ 可以是 None。通常情况下,Windows GUI应用程序未连接到控制台和Python应用程序以 pythonw 开始。

sys.thread_info

A struct sequence 持有关于线程实现的信息。

属性

说明

name

线程实现的名称:

  • 'nt':Windows线程

  • 'pthread':POSIX线程

  • 'solaris':Solaris线程

lock

锁实现的名称:

  • 'semaphore':锁使用信号量

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

  • None 如果此信息未知

version

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

3.3 新版功能.

sys.tracebacklimit

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

sys.version

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

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 模块。

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的访问通过 -X 传递的选项的方法。其他实现可以通过其他手段导出它们,或者根本不导出。

3.2 新版功能.

引文

[C99]

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