sys --- 系统相关函数

本模块提供对解释器特定变量和函数的访问,包括命令行参数、模块搜索路径、标准流以及当前运行实现的相关信息。

函数

sys.exit(retval: object = 0, /) NoReturn

以给定的退出码终止当前程序。在底层,该函数会引发一个 SystemExit 异常。如果提供了参数,则该参数的值会作为参数传给 SystemExit

在 OpenMV Cam 上,未处理的 SystemExit 目前会导致 MicroPython 执行一次 软复位

sys.atexit(func: Callable[[], None] | None) Callable[[], None] | None

注册 func 以在程序终止时被调用。func 必须是一个不接受任何参数的可调用对象,或为 None 以禁用该调用。atexit 函数会返回此前由本函数设置的值,其初始值为 None

与 CPython 的区别

本函数是 MicroPython 的扩展,旨在提供与 CPython 中 atexit 模块类似的功能。

sys.print_exception(exc: BaseException, file: Any = sys.stdout, /) None

将异常及其回溯(traceback)打印到类文件对象 file(默认为 sys.stdout)。

与 CPython 的区别

这是 CPython 中 traceback 模块某个函数的简化版本。与 traceback.print_exception() 不同,本函数只接受异常值,而不接受异常类型、异常值和回溯对象;file 参数应为位置参数;不支持更多参数。与 CPython 兼容的 traceback 模块可在 micropython-lib 中找到。

sys.settrace(tracefunc: Callable | None) None

启用字节码执行的跟踪。详情请参阅 CPython 文档

本函数 在 OpenMV Cam 上不可用。它默认被禁用,因为会拖慢代码执行速度;启用它需要构建自定义固件。

常量

sys.argv: list[str]

当前程序启动时所带参数的可变列表。

sys.byteorder: str

系统的字节序("little""big")。

sys.implementation: object

包含当前 Python 实现相关信息的对象。对于 MicroPython,它具有以下属性:

  • name —— 字符串 "micropython"

  • version —— 元组 (major, minor, micro, releaselevel),例如 (1, 22, 0, '')

  • _machine —— 描述底层机器的字符串

  • _mpy —— 所支持的 mpy 文件格式版本(可选属性)

  • _build —— 有助于识别 MicroPython 构建配置的字符串

  • _thread —— 可选的字符串属性,仅当目标平台支持线程时存在,其值为 "GIL" 或 "unsafe"

此对象是区分 MicroPython 与其他 Python 实现的推荐方式(请注意,在极简版本的移植中它可能仍然不存在)。

从版本 1.22.0-preview 起,implementation.version 中的第四个节点 releaselevel 要么是空字符串,要么是 "preview"

_build 条目在版本 1.25.0 中加入,是一组以连字符分隔的元素。未来可能会追加新元素,因此最好使用 sys.implementation._build.split("-") 来访问该字段。当前使用的元素有:

  • 在 OpenMV Cam 上,第一个元素是开发板名称,第二个元素(如果存在)是开发板变体。

_thread 条目在版本 1.26.0 中加入,如果它存在,则表示目标平台具有 _thread 模块。如果目标平台启用了 GIL(全局解释器锁),则该属性为 "GIL"。否则该属性为 "unsafe",表示目标平台支持线程但未启用 GIL,此时在多个线程间共享的可变 Python 对象(例如 bytearraylistdict)必须通过诸如 _thread.allocate_lock 这样的锁显式加以保护。

与 CPython 的区别

CPython 为此对象规定了更多属性,但 MicroPython 只实现了实际有用的最低限度部分。

sys.maxsize: int

当前平台上原生整数类型所能容纳的最大值;如果 MicroPython 整数类型可表示的最大值小于平台最大值(对于不支持长整数的 MicroPython 移植即是如此),则为后者。

此属性有助于检测平台的“位数”(32 位还是 64 位等)。建议不要直接将此属性与某个值进行比较,而应统计其中的位数:

bits = 0
v = sys.maxsize
while v:
    bits += 1
    v >>= 1
if bits > 32:
    # 64-bit (or more) platform
    ...
else:
    # 32-bit (or less) platform
    # Note that on 32-bit platform, value of bits may be less than 32
    # (e.g. 31) due to peculiarities described above, so use "> 16",
    # "> 32", "> 64" style of comparisons.
sys.modules: dict

已加载模块的字典。在 OpenMV Cam 上,这不包括内置模块。

sys.path: list[str]

用于搜索被导入模块的目录的可变列表。

与 CPython 的区别

在 MicroPython 中,值为 ".frozen" 的条目表示导入操作应在搜索的该处查找 冻结模块。如果未找到冻结模块,搜索将 不会 去查找名为 .frozen 的目录,而是继续处理 sys.path 中的下一个条目。

sys.platform: str

MicroPython 所运行的平台。这是一个由移植/开发板定义的字符串——例如,在 OpenMV RT1060 上为 "mimxrt",在 OpenMV AE3 上为 "alif"(某些较旧的 OpenMV Cam 会报告诸如 "OpenMV4-H7" 这样的特定型号字符串)。要检查你的程序是否运行在 MicroPython(而非其他 Python 实现)上,请改用 sys.implementation

sys.ps1: str

保存主 REPL 提示符所用字符串的可变属性。默认值为标准 Python 提示符 >>>。另请参阅用于续行提示符的 sys.ps2

sys.ps2: str

保存 REPL 续行提示符所用字符串的可变属性。默认值为标准 Python 提示符 ...。另请参阅用于主提示符的 sys.ps1

sys.stderr: object

标准错误 stream

sys.stdin: object

标准输入 stream

sys.stdout: object

标准输出 stream

sys.tracebacklimit: int

一个可变属性,保存一个整数值,表示在异常中存储的回溯条目的最大数量。设为 0 可禁用回溯的添加。默认值为 1000。

注意:此属性在 OpenMV Cam 上不可用。

sys.version: str

此实现所遵循的 Python 语言版本,以字符串形式表示。

sys.version_info: tuple

此实现所遵循的 Python 语言版本,以整数元组形式表示。

与 CPython 的区别

仅支持前三个版本号(major、minor、micro),且只能通过索引引用,而不能通过名称引用。