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.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 对象(例如bytearray、list和dict)必须通过诸如_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.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。