您的位置:  首页 » Python » – 特定于系统的参数和函数 – Python运行时服务(Python教程)(参考资料)

sys– 系统特定参数和功能


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

sys.abiflags

在使用标准configure脚本,它包含PEP 3149 .

版本3.2.

sys.argv

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

要循环标准输入或命令行上给出的文件列表,请在运行fileinput之前的Ipython启动期间查看

sys.base_exec_prefix

module.site.pySet与exec_prefix。如果没有在虚拟环境中运行,则值保持不变;如果site.py发现正在使用虚拟环境,则prefixexec_prefix将被更改为指向虚拟环境,而base_prefixbase_exec_prefix将继续指向基础Python安装(创建虚拟环境的安装).

版本3.3中的新功能

sys.base_prefix

在Python启动期间,在site.py运行之前设置为与prefix相同的值。如果没有在虚拟环境中运行,价值将保持不变;如果site.py发现虚拟环境有用,prefixexec_prefix的值将被改为topoint到虚拟环境,而base_prefixbase_exec_prefix将继续指向基础Python安装(创建虚拟环境的安装).

版本3.3.

sys.byteorder

本机字节顺序的指示符。这将具有值"big" onbig-endian(最重要的字节优先)平台,以及"little" onlittle-endian(最不重要的字节优先)平台.

sys.builtin_module_names

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

sys.call_tracingfunc, args

打电话func(*args),同时启用跟踪。跟踪状态被保存,然后恢复。这是从调试器调用检查点调用,以递归方式调试其他代码.

sys.copyright

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

sys._clear_type_cache ()

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

此功能仅供内部和专业用途使用.

sys._current_frames ( )

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

这对于调试死锁非常有用:这个函数不需要解锁线程的协作,并且这些线程的调用堆栈会被冻结一段时间,因为它们会保持死锁状态。对于非死锁线程返回的帧可能在调用代码检查帧时与该线程的当前活动无关.

此功能仅用于内部和专门用途.

sys.breakpointhook

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

该函数的签名取决于它所调用的内容。例如,默认绑定(例如pdb.set_trace()期望没有参数,但你可以将它绑定到一个需要额外参数(位置和/或关键字)的函数。内置breakpoint()功能*args**kws直截了当的。无论breakpointhooks()返回是从breakpoint().

返回的默认实现首先参考环境变量PYTHONBREAKPOINT。如果设置为"0"则此函数立即返回;即它是一个无操作。如果未设置环境变量,或者设置为空字符串,则调用pdb.set_trace()。否则,此变量应使用Python的dotted-import命名法命名要运行的函数,例如:package.subpackage.module.function。在这种情况下,package.subpackage.module将被导入,结果模块必须有一个名为function()的可调用对象。这是运行,传入*args**kws,无论function()返回,sys.breakpointhook()返回内置的breakpoint()函数。

请注意,如果在导入由PYTHONBREAKPOINT命名的可调用对象时出现问题,则报告RuntimeWarning并忽略断点.

还要注意,如果sys.breakpointhook()以编程方式覆盖,PYTHONBREAKPOINTnot咨询

新版本3.7.

sys._debugmallocstats ()

向stderr打印关于CPython内存分配器状态的低级信息.

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

新版本3.3.

CPython实现细节:此函数特定于Python。这里没有定义确切的输出格式,可能会改变.

sys.dllhandle

指定Python DLL的句柄.

Availability:Windows.

sys.displayhookvalue

如果value不是 None,此功能打印repr(value)sys.stdout,并保存valuebuiltins._。如果repr(value)不能编码到sys.stdout.encodingsys.stdout.errors错误处理程序(可能是"strict"),编码为sys.stdout.encoding"backslashreplace"错误处理程序

sys.displayhook调用表达式的结果在交互式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模块的导入文件。该值最初设置为True要么False取决于-B命令行选项和PYTHONDONTWRITEBYTECODE环境变量,但你可以设置ityourself来控制字节码文件的生成.

sys.excepthooktype, value, traceback

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

当异常被提出并且未被捕获时,解释器调用sys.excepthook有三个参数,异常类,exceptioninstance和traceback对象。在交互式会话中,这种情况恰好在控制返回到提示之前发生;在Python程序中,这会在程序退出之前发生。通过为sys.excepthook.

sys.__breakpointhook__
sys.__displayhook__
sys.__excepthook__

这些对象在程序开头包含breakpointhook,displayhookexcepthook的原始值。它们被保存以便breakpointhook, displayhookexcepthook可以恢复,以防它们碰巧被破损或替代物体取代.

新版本3.7:__breakpointhook __

sys.exc_info

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

如果堆栈中的任何地方都没有异常处理,则为元组包含三个None值。否则,返回的值是(type, value, traceback)。它们的意思是:type获取正在处理的异常类型(BaseException的子类);value获取异常实例(异常类型的实例);tracebackgetsa traceback对象(参见参考手册),它将callstack封装在最初发生异常的位置.

sys.exec_prefix

给出特定于站点的目录前缀的字符串,其中安装了platform-dependentPython文件;默认情况下,这也是"/usr/local"。这可以在构建时设置--exec-prefix配置脚本。具体来说,所有配置文件(例如pyconfig.h头文件)安装在目录exec_prefix/lib/pythonX.Y/config,共享库模块安装在exec_prefix/lib/pythonX.Y/lib-dynloadX.Y是Python的版本号,例如3.2.

注意

如果一个 虚拟环境实际上,此值将在site.py指向虚拟环境。通过base_exec_prefix.

sys.executable

一个字符串,给出Python解释器的可执行二进制文件的绝对路径,在有意义的系统上。如果Python无法检索其可执行文件的真实路径,sys.executable将是一个空的字符串None.

sys.exit [arg]

退出Python。这是通过引发SystemExit异常来实现的,所以try语句的finally子句指定的清理动作都得到了尊重,并且可以拦截外层的退出尝试.

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

exit()最终“only”引发异常,它只会在从主线程调用时退出进程,异常不会被截获.

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

sys.flags

结构序列 flags公开命令行标志的状态。属性是只读的.

属性
debug -d
inspect -i
interactive -i
isolated -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
dev_mode -X dev
utf8_mode -X utf8

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

新版本3.2.3: hash_randomization属性

更改版本3.3:删除过时division_warning属性

更改版本3.4:添加了isolated -I isolatedflag.

更改版本3.7:添加了dev_mode属性为新的-X dev flagand utf8_mode属性为新的-X utf8 flag.

sys.float_info

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

attribute float.h宏 说明
epsilon DBL_EPSILON 介于1和最大值之间的差值大于1可表示为浮点
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 最小正规范化浮点数
min_exp DBL_MIN_EXP 最小整数这样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转换为afloat并再次返回将恢复表示相同decimalvalue的字符串:

>>> import sys>>> sys.float_info.dig15>>> 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()函数表现为forfloats。如果字符串有值"short"那么对于finitefloat x, repr(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.getandroidapilevel (

以整数形式返回Android的构建时API版本.

Availability:Android.

新版本3.7.

sys.getcheckinterval

返回解释器的“检查间隔”;看setcheckinterval().

从版本3.2开始不推荐使用:使用getswitchinterval()代替

sys.getdefaultencoding)

返回当前使用的默认字符串编码的名称通过Unicodeimplementation.

sys.getdlopenflags()

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

可用性:Unix.

sys.getfilesystemencoding

返回用于在Unicode文件名和字节文件名之间进行转换的编码名称。为了获得最佳兼容性,在所有情况下都应该使用str作为文件名,尽管也支持将文件名表示为bytesis。接受或返回文件名的函数应该支持str或bytes,并在内部转换为系统的首选代表.

这种编码总是与ASCII兼容的.

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

  • 在UTF-8模式下,编码在任何平台上都是utf-8.
  • 在Mac OS X上,编码是"utf-8".
  • 在Unix上,编码是语言环境编码。
  • 在Windows上,编码可能是"utf-8""mbcs",具体取决于用户配置.

更改版本3.2:getfilesystemencoding()结果不能是None再来.

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

改版3.7:返回’utf-8’inUTF-8模式.

sys.getfilesystemencodeerrors ()

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

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

新版本3.6.

sys.getrefcountobject

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

sys.getrecursionlimit

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

sys.getsizeofobject [, default]

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

只记录直接归因于对象的内存消耗,而不是它所引用的对象的内存消耗.

如果给出,default如果对象没有提供恢复大小的方法,则将返回。否则TypeError会被提出来

getsizeof()调用对象的__sizeof__如果对象由garbagecollector.

有关使用getsizeof()递归地找到容器及其所有内容的大小.

sys.getswitchinterval ()

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

版本3.2.

sys._getframe( [depth])

从调用堆栈返回一个框架对象。如果可选的整数depth isgiven,则返回多次调用堆栈顶部下方的框架对象。如果比调用堆栈更深,ValueError被提出来了。depth的默认值为零,返回调用堆栈顶部的框架.

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

sys.getprofile

获取setprofile().

sys.gettrace

获取settrace().

设置的跟踪功能CPython实现细节: gettrace()函数仅用于实现调试器,分析器,覆盖工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,并且可能在所有Python实现中都不可用.

sys.getwindowsversion ()

返回一个命名元组描述当前正在运行的Windows版本。命名元素是major, minor,build, platform, service_pack, service_pack_minor,service_pack_major, suite_mask, product_typeplatform_version. service_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_minor,service_pack_major, suite_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.

Note

这个功能是临时添加的(见 PEP 411 有关详细信息。)仅用于调试目的.

sys.get_coroutine_wrapper

返回None,或由set_coroutine_wrapper().

版本3.5中的新功能:PEP 492 更多细节。

注意

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

从版本3.7开始不推荐使用:协程包装器功能已被弃用,将在3.8中删除。详情请见bpo-32591 .

sys.hash_info

一个 结构序列给出数字hashimplementation的参数。有关数值类型哈希的更多详细信息,请参阅哈希数值类型.

属性 说明
width 用于哈希值的位宽度
modulus 素数模数P用于数字哈希方案
inf 哈希值返回正无穷大
nan 为 @返回哈希值
imag 用于复数的虚部的乘数
algorithm 用于散列str,bytes和memoryview的算法的名称
hash_bits 哈希算法的内部输出大小
seed_bits 哈希算法的种子密钥的大小

版本3.2.

版本3.4更改:添加 algorithm, 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()函数才真正有意义。结构序列 sys.version_info可以用来对相同信息进行更人性化的编码.

hexversion的更多细节可以在 API和ABI版本中找到.

sys.implementation

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

name是实现的标识符,例如,"cpython"。实际字符串由Python实现定义,但保证低于case.

version是一个命名元组,格式与sys.version_info相同。它代表了Python implementation的版本。这与当前运行的解释器符合的Python language特定版本具有明显的含义,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,它们是相同的值,因为它是参考实现.

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

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

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

3.3版本中的新功能

sys.int_info

一个 结构序列它包含有关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)

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

交叉字符串不是永久性的;你必须提到intern()的返回值,以便从中受益.

sys.is_finalizing ()

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

新版本3.5.

sys.last_type
sys.last_value
sys.last_traceback

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

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

sys.maxsize

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

sys.maxunicode

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

改版3.3:之前PEP 393 , sys.maxunicode曾经是0xFFFF要么 0x10FFFF,取决于指定的Unicode配置文件是否存储为UCS-2或UCS-4的配置选项.

sys.meta_path

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

也可以看看

importlib.abc.MetaPathFinder
定义meta_path.
importlib.machinery.ModuleSpec
的具体课find_spec()应该返回的实例.

版本3.4更改:模块规格在PHP 3.4中引入,PEP 451 。早期版本的Python寻找一个名为find_module()。如果meta_path进入没有find_spec()方法。

sys.modules

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

sys.path

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

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

程序可以自行修改此列表。只应将字符串和字节添加到sys.path;导入过程中所有其他数据类型都被标记

参见

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

sys.path_hooks

一个带有路径参数的callables列表,试图创建一个 finder 为了这条路。如果可以创建一个取景器,它可以被赎回,或者提升ImportError.

最初在PEP 302 .

sys.path_importer_cache

作为发现者对象。键是已传递给sys.path_hooks的路径,值是找到的查找器。如果路径是有效的文件系统路径,但在sys.path_hooks上找到nofinder则None isstored。

最初在PEP 302 .

改版3.3:None存储而不是imp.NullImporter没找到finderis时

sys.platform

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

对于Unix系统,除了在Linux上,这是由uname -s返回的小写操作系统名称,其中附带的uname -r返回的版本的第一部分,例如,"sunos5" 要么 "freebsd8", at the timewhen Python was built。除非您想测试特定的系统版本,否则建议使用以下习惯用法:

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

对于其他系统,值为:

系统 platform
Linux "linux"
Windows "win32"
Windows / Cygwin "cygwin"
Mac OS X "darwin"

更改版本3.3:在Linux上,sys.platform不再包含主要版本。总是"linux",而不是"linux2""linux3"。Sinceolder Python版本包含版本号,建议总是使用上面提到的startswith成语.

参见

os.name有一个较粗的粒度。os.uname()给系统依赖的版本信息.

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

sys.prefix

一个字符串给出了特定于站点的目录前缀安装了platformindependent Python文件;默认情况下,这是字符串"/usr/local"//。这可以在构建时设置--prefix参数配置脚本。Pythonlibrary模块的主要集合安装在目录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.setcheckintervalinterval

设置解释器的“检查间隔”。此整数值确定解释器检查周期性事物(如线程切换和信号处理程序)的方式。默认值为100,表示每100Python虚拟指令执行一次检查。将其设置为更大的值可以提高使用线程的程序的性能。将其设置为值<= 0 checksevery虚拟指令,最大化响应性和开销.

自版本3.2:后重新执行此功能不再有效,作为内部逻辑,刚读取的切换和异步任务已被重写。使用setswitchinterval()代替

sys.setdlopenflagsn)

设置翻译所使用的标志dlopen()来电,例如翻译时加载扩展模块。除此之外,这将在导入模块时启用符号解析,如果调用sys.setdlopenflags(0)。要在扩展模块之间共享符号,请调用sys.setdlopenflags(os.RTLD_GLOBAL)。可以在osmodule(RTLD_xxx常数,例如os.RTLD_LAZY).

可用性:Unix .

sys.setprofile (profilefunc)

设置系统的配置文件功能,允许您在Py​​thon中实现Python源代码分析器。有关thePython探查器的更多信息,请参见章节 Python Profilers 。系统的配置文件函数的调用类似于系统的跟踪函数(参见settrace()),但它使用不同的事件调用,例如,不会为每个执行的代码行调用它(仅在调用和返回时调用,但是即使已设置异常,也会报告返回事件)。函数是特定于线程的,但是探查器无法知道在线程之间的上下文切换,因此在存在多个线程时使用它是没有意义的。此外,它的返回值没有使用,所以它可以简单地返回None。profileof中的错误会导致自身未设置.

配置文件函数应该有三个参数:frame, eventarg. frame是当前的堆栈帧。event是一个字符串:"call","return", "c_call", "c_return", 要么 "c_exception". arg取决于事件类型.

这些事件具有以下含义:

"call"
调用一个函数(或输入一些其他代码块)。调用该配置函数;argNone.
"return"
函数(或其他代码块)即将返回。调用profile函数;arg是要返回的值,或None如果事件是由引发异常引起的.
"c_call"
即将调用C函数。这可能是内置的扩展功能。arg是C函数对象.
"c_return"
C函数已返回。arg是C函数对象.
"c_exception"
C函数引发了异常。arg是C函数对象.
sys.setrecursionlimitlimit

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

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

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

在版本3.5.1中更改:如果新限制是当前递归深度的工具,则RecursionError异常现在被引发.

sys.setswitchintervalinterval

设置解释器的线程切换间隔(以秒为单位)。此浮点值确定了同时运行Python线程所分配的“timeslices”的理想持续时间。请注意,实际值可能更高,尤其是在使用长时间运行的内部功能或方法的情况下。此外,在间隔结束时调度的线程是操作系统的决定。解释器没有自己的调度程序.

新版本3.2.

sys.settrace (tracefunc)

设置系统的跟踪功能,允许您在Py​​thon中实现Pythonsource代码调试器。该函数是特定于线程的;对于adebugger支持多线程,必须使用settrace()对于每个被调试的线程

Trace函数应该有三个参数:frame, eventarg. frame是当前的堆栈帧。event是一个字符串:"call","line", "return", "exception""opcode". arg取决于事件类型.

无论何时输入newlocal范围,都会调用trace函数(event设置为"call");它应该返回对该范围使用的本地跟踪函数的引用,或None如果不应该跟踪范围.

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

如果跟踪功能中发生任何错误,它将被取消设置,就像settrace(None)叫做。

这些事件具有以下含义:

"call"
调用一个函数(或输入一些其他代码块)。调用全局跟踪函数;argNone;返回值指定本地跟踪功能.
"line"
解释器即将执行新的代码行或重新执行循环的条件。调用本地跟踪功能;argNone;返回值指定新的本地跟踪功能。有关如何通过在该帧上设置Objects/lnotab_notes.txtf_trace_lines来禁用thisworks.Per-line事件的详细说明,请参见False .
"return"
函数(或其他代码块)即将返回。调用本地跟踪功能;arg是将返回的值,或None如果事件是由引发的异常引起的。跟踪函数的返回值被忽略.
"exception"
发生异常。调用本地跟踪功能;arg是at//le (exception, value, traceback);返回值指定新的本地跟踪功能.
"opcode"
解释器即将执行新的操作码(见disforopcode详细信息)。调用本地跟踪功能;argNone;返回值指定新的本地跟踪功能。默认情况下不会发出操作码事件:必须通过在框架上设置f_trace_opcodesTrue来明确请求它们.

请注意,由于异常沿着调用者链向下传播,因此在每个级别生成一个"exception"事件.

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

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

更改版本3.7:"opcode"事件类型已添加;f_trace_linesf_trace_opcodes属性添加到框架

sys.set_asyncgen_hooksfirstiter, finalizer

接受两个可选的关键字参数,这些参数是接受异步生成器迭代器作为参数。当异步生成器第一次迭代时,将调用firstiter callable。finalizer当异步生成器即将被垃圾收集时将被调用.

版本3.6中新增:PEP 525 有关详细信息,以及finalizer方法见asyncio.Loop.shutdown_asyncgens inLib / asyncio / base_events.py的实现

注意

此函数是临时添加的(参见 PEP 411了解详情。)

sys.set_coroutine_origin_tracking_depthdepth

允许启用或禁用协同源跟踪。可以,cr_origin上协程对象属性willcontain(文件名,行号,函数名)tuplesdescribing其中创建协程对象追溯的一个元组,与最近的呼叫第一。禁用时,cr_originwillbe None。

启用,传递depth大于零的值;这将设置其信息将被捕获的帧的数量。要禁用,请将set depth传递给零.

此设置是线程特定的.

版本3.7.

注意

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

sys.set_coroutine_wrapperwrapper

允许截取协程对象(只有async def功能;用types.coroutine()要么 asyncio.coroutine()不会被截获).

wrapper论证必须是:

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

如果调用两次,则新包装器将替换前一个包装器。该功能是线程专用的.

wrappercallable不能直接或间接定义新的协同程序:

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 有关详细信息。)仅用于调试目的.

自版本3.7以后删除:协程包装器功能已被弃用,将在3.8中删除。有关详细信息,请参阅bpo-32591.

sys._enablelegacywindowsfsencoding()

将默认文件系统编码和错误模式分别更改为’mbcs’和’place’,以保证与版本的一致性3.6之前的Python

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

Availability:Windows.

版本3.6中的新功能:参见 PEP 529 了解更多详情.

sys.stdin
sys.stdout
sys.stderr

翻译使用的文件标准输入,输出和错误:

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

这些流是常规文本文件就像那些被open()函数回复的文件一样。他们的参数选择如下:

  • 字符编码与平台有关。在Windows下,如果流是交互式的(即,如果它是isatty()方法返回True),使用控制台代码页,否则使用ANSI代码页。在其他平台下,使用了语言环境编码(参见locale.getpreferredencoding()).

    但是在所有平台下,你可以在启动Python之前设置PYTHONIOENCODING环境变量来覆盖这个值.

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

注意

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

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

sys.__stdin__
sys.__stdout__
sys.__stderr__

这些对象包含stdin, stderrstdout在计划开始时。它们在最终确定期间使用,无论sys.std*对象是否被重定向,都可以用于打印到实际的标准流.

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

注意

在某些条件下stdin, stdoutstderr以及原始值__stdin__, __stdout____stderr__可以是None。通常情况下,未连接到控制台的Windows GUI应用程序和以pythonw .

sys.thread_info

一个 结构序列保存有关threadimplementation的信息.

Attribute 解释
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 module.

sys.api_version

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

sys.version_info

包含版本号的五个组件的元组:major, minor,micro, releaselevelserial。除了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

这是警告框架的实施细节;不要修改此值。有关warningsframework的详细信息,请参阅warnings模块.

sys.winver

用于在Windows平台上形成注册表项的版本号。这是作为Python DLL中的字符串资源1000存储的。该值通常是version的前三个字符。它在sys用于提供信息的模块;修改这个值对Python使用的部门键没有影响.

Availability:Windows.

sys._xoptions

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

$ ./python -Xa=b -XcPython 3.2a3+ (py3k, Oct 16 2010, 20:14:50)[GCC 4.4.3] on linux2Type "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。“编程语言 – C.”该标准的公开草案可在http:www.open-std.orgjtc1sc22wg14wwwdocsn1256.pdf.上找到。

发表评论

电子邮件地址不会被公开。 必填项已用*标注