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),且只能透過索引引用,不能透過名稱引用。