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

ファイルライクオブジェクト 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 の 4 番目のノード releaselevel は、空文字列または "preview" のいずれかになります。

_build エントリはバージョン 1.25.0 で追加され、ハイフンで区切られた要素の集合です。将来的に新しい要素が追加される可能性があるため、このフィールドには sys.implementation._build.split("-") を使ってアクセスするのが最善です。現在使用されている要素は次のとおりです:

  • OpenMV Cam では、最初の要素はボード名で、2 番目の要素(存在する場合)はボードのバリアントです。

_thread エントリはバージョン 1.26.0 で追加され、これが存在する場合、ターゲットは _thread モジュールを持っています。ターゲットが GIL(グローバルインタプリタロック)を有効にしている場合、この属性は "GIL" になります。それ以外の場合、属性は "unsafe" となり、ターゲットはスレッドをサポートしていますが GIL を有効にしていません。この場合、スレッド間で共有される可変な Python オブジェクト(bytearraylistdict など)は、_thread.allocate_lock などのロックで明示的に保護する必要があります。

CPython との違い

CPython ではこのオブジェクトにさらに多くの属性が必須とされていますが、実際に有用な最小限のものが MicroPython では実装されています。

sys.maxsize: int

現在のプラットフォームでネイティブの整数型が保持できる最大値、または MicroPython の整数型で表現可能な最大値(プラットフォームの最大値より小さい場合。これは long int サポートのない 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 modules を検索すべきことを示します。frozen モジュールが見つからない場合、検索は .frozen という名前のディレクトリを探すことは せず、代わりに sys.path の次のエントリへ進みます。

sys.platform: str

MicroPython が動作しているプラットフォームです。これはポート/ボードで定義される文字列です。例えば OpenMV RT1060 では "mimxrt"、OpenMV AE3 では "alif" となります(一部の古い OpenMV Cam では "OpenMV4-H7" のようなモデル固有の文字列を報告します)。プログラムが(他の Python 実装ではなく)MicroPython 上で動作しているかどうかを確認するには、代わりに 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 言語のバージョンを int のタプルで表したものです。

CPython との違い

最初の 3 つのバージョン番号(major、minor、micro)のみがサポートされており、それらは名前ではなくインデックスによってのみ参照できます。