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。