"platform" ---  実行中プラットフォームの固有情報を参照する
**********************************************************

**ソースコード:** Lib/platform.py

======================================================================

注釈:

  プラットフォーム毎にアルファベット順に並べています。Linuxについては
  Unixセクションを参照してください。


プラットフォーム共通
====================

platform.architecture(executable=sys.executable, bits='', linkage='')

   *executable* で指定した実行可能ファイル（省略時はPythonインタープリ
   タのバイナリ）の各種アーキテクチャ情報を調べます。

   戻り値はタプル "(bits, linkage)" で、アーキテクチャのビット数と実行
   可能ファイルのリンク形式を示します。どちらの値も文字列で返ります。

   値を決定できない場合はパラメータプリセットから与えられる値を返しま
   す。bits に "''" を与えた場合、サポートされているポインタサイズを知
   るために "sizeof(pointer)" (Python バージョン < 1.5.2 では
   "sizeof(long)") が使用されます。

   この関数は、システムの "file" コマンドを使用します。 "file" はほと
   んどのUnixプラットフォームと一部の非Unixプラットフォームで利用可能
   ですが、 "file" コマンドが利用できず、かつ *executable* が Pythonイ
   ンタープリタでない場合には適切なデフォルト値が返ります。

   注釈:

     macOS (とひょっとすると他のプラットフォーム) では、実行可能ファイ
     ルは複数のアーキテクチャを含んだユニバーサル形式かもしれません。
     現在のインタープリターが "64-bit" であるかどうかを調べるには、
     "sys.maxsize" の方が信頼できます:

        is_64bits = sys.maxsize > 2**32

platform.machine()

   "'AMD64'" のような、機種を返します。不明な場合は空文字列を返します
   。

   出力はプラットフォームに依存し、大文字・小文字や命名規則が異なる場
   合があります。

platform.node()

   コンピュータのネットワーク名を返します。ネットワーク名は完全修飾名
   とは限りません。不明な場合は空文字列を返します。

platform.platform(aliased=False, terse=False)

   実行中プラットフォームを識別する文字列を返します。この文字列には、
   有益な情報をできるだけ多く付加しています。

   戻り値は機械で処理しやすい形式ではなく、*人間にとって読みやすい* 形
   式となっています。異なったプラットフォームでは異なった戻り値となる
   ようになっています。

   *aliased* が真の場合、報告されるシステム名が一般的な名称と異なるプ
   ラットフォームでは、その一般的な名称を返します。 例えば SunOS は
   Solaris として報告されます。 この処理には "system_alias()" を使いま
   す。

   *terse* が真なら、プラットフォームを特定するために最低限必要な情報
   だけを返します。

   バージョン 3.8 で変更: macOSでは、 "mac_ver()" が空でないリリース文
   字列を返すとき、darwin のバージョンではなく macOS のバージョンを取
   得するために、この関数は "mac_ver()" を使うようになりました。

platform.processor()

   "'amdk6'" のような、（現実の）プロセッサ名を返します。

   不明な場合は空文字列を返します。NetBSDのようにこの情報を提供しない
   、または "machine()" と同じ値しか返さないプラットフォームも多く存在
   しますので、注意してください。

platform.python_build()

   Pythonのビルド番号と日付を、"(buildno, builddate)" のタプルで返しま
   す。

platform.python_compiler()

   Pythonをコンパイルする際に使用したコンパイラを示す文字列を返します
   。

platform.python_branch()

   Python実装のバージョン管理システム上のブランチを特定する文字列を返
   します。

platform.python_implementation()

   Python実装を指定する文字列を返します。戻り値は: 'CPython',
   'IronPython', 'Jython', 'PyPy' のいずれかです。

platform.python_revision()

   Python実装のバージョン管理システム上のリビジョンを特定する文字列を
   返します。

platform.python_version()

   Python のバージョンを、"'major.minor.patchlevel'" 形式の文字列で返
   します。

   "sys.version" と異なり、patchlevel（デフォルトでは0)も必ず含まれて
   います。

platform.python_version_tuple()

   Pythonのバージョンを、文字列のタプル "(major, minor, patchlevel)"
   で返します。

   "sys.version" と異なり、patchlevel（デフォルトでは "'0'")も必ず含ま
   れています。

platform.release()

   "'2.2.0'" や "'NT'" のような、システムのリリース情報を返します。不
   明な場合は空文字列を返します。

   iOS と Android では、ユーザ向けの OS のリリースを返します。 Darwin
   や Linux のカーネルのリリースを取得するには、"os.uname()" を使って
   ください。

platform.system()

   "'Linux'" 、 "'Darwin'" 、 "'Java'" 、 "'Windows'" のような、システ
   ム/OS 名を返します。不明な場合は空文字列を返します。

   iOS と Android では、ユーザ向けの OS 名 ("'iOS'"、"'iPadOS'"、
   "'Android'") を返します。 カーネル名 ("'Darwin'" や "'Linux'") を取
   得するには、"os.uname()" を使ってください。

platform.system_alias(system, release, version)

   マーケティング目的で使われる一般的な別名に変換して "(system,
   release, version)" を返します。混乱を避けるために、情報を並べなおす
   場合があります。

platform.version()

   "'#3 on degas'" のような、システムのリリース情報を返します。不明な
   場合は空文字列を返します。

platform.uname()

   極めて可搬性の高い uname インターフェースです。 "system", "node",
   "release", "version", "machine", "processor" の6つの属性を持った
   "namedtuple()" を返します。

   "processor" は必要になった時点で遅延評価されます。

   注意: 最初の二つの属性名は、"os.uname()" の "sysname" と "nodename"
   とは異なります。

   不明な項目は "''" となります。

   バージョン 3.3 で変更: 結果が タプル から "namedtuple()" へ変更され
   ました。

   バージョン 3.9 で変更: "processor" は即座に評価されず、遅延評価され
   るようになりました。

platform.invalidate_caches()

   "uname()" などの情報の内部キャッシュを消去します。 典型的には、外部
   プロセスによってプラットフォームの "node()" が変更され、更新後の値
   を取得する必要がある場合に役立ちます。

   Added in version 3.14.


Windows プラットフォーム
========================

platform.win32_ver(release='', version='', csd='', ptype='')

   Windows レジストリから追加のバージョン情報を取得し、OS のリリース、
   バージョン番号、CSD レベル (サービスパック)、OS の種類 (マルチプロ
   セッサー/シングルプロセッサー) を表すタプル "(release, version,
   csd, ptype)" を返します。 取得できない値には、引数で指定したデフォ
   ルト値を使います (各引数のデフォルトは空文字列です)。

   参考として、*ptype* はシングルプロセッサーの NT マシンでは
   "'Uniprocessor Free'"、マルチプロセッサーのマシンでは
   "'Multiprocessor Free'" になります。 "'Free'" は、OS にデバッグ用の
   コードが含まれていないことを表します。 "'Checked'" の場合もあり、こ
   れは OS が引数や範囲などをチェックするデバッグ用のコードを使ってい
   ることを表します。

platform.win32_edition()

   現在の Windows のエディションを表す文字列を返します。 取得できない
   場合は "None" を返します。 値には "'Enterprise'"、"'IoTUAP'"、
   "'ServerStandard'"、"'nanoserver'" などがありますが、これらに限りま
   せん。

   Added in version 3.8.

platform.win32_is_iot()

   "win32_edition()" によって返された Windows のエディションが IoT エ
   ディションの時 "True" を返します。

   Added in version 3.8.


macOS プラットフォーム
======================

platform.mac_ver(release='', versioninfo=('', '', ''), machine='')

   macOS のバージョン情報を、タプル "(release, versioninfo, machine)"
   で返します。*versioninfo* は、タプル "(version, dev_stage,
   non_release_version)" です。

   不明な項目は "''" となります。タプルの要素は全て文字列です。


iOS プラットフォーム
====================

platform.ios_ver(system='', release='', model='', is_simulator=False)

   iOS のバージョン情報を取得し、次の属性付きで "namedtuple()" として
   返します。

   * "system" は OS 名です。 "'iOS'" または "'iPadOS'" となります。

   * "release" は、 iOS のバージョン番号の文字列です。 ("'17.2'" など)

   * "model" はデバイスモデルの識別子です。これは物理デバイスでは
     "'iPhone13,2'" 、シミュレーターでは "'iPhone'" のような文字列にな
     ります。

   * "is_simulator" は、アプリがシミュレーター上で実行されているのか、
     物理デバイス上で実行されているのかを示す真偽値です。

   決定不能な項目は、引数として指定されたデフォルトに設定されます。


Unix プラットフォーム
=====================

platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)

   executableで指定したファイル（省略時はPythonインタープリタ）がリン
   クしているlibcバージョンの取得を試みます。戻り値は文字列のタプル
   "(lib, version)" で、不明な項目は引数で指定した値となります。

   この関数は、実行形式に追加されるシンボルの細かな違いによって、libc
   のバージョンを特定します。この違いは **gcc** でコンパイルされた実行
   可能ファイルでのみ有効だと思われます。

   ファイルを *chunksize* バイトずつ読み込み、調べます。


Linux プラットフォーム
======================

platform.freedesktop_os_release()

   "os-release" ファイルから OS の識別情報を取得し、辞書として返します
   。 "os-release" ファイルは freedesktop.org の標準 で、多くの Linux
   ディストリビューションで利用できます。 主な例外は、Android と
   Android を基にしたディストリビューションです。

   "/etc/os-release" と "/usr/lib/os-release" のどちらも読み込めない場
   合、"OSError" またはそのサブクラスの例外を送出します。

   成功すると、キーと値が文字列の辞書を返します。 値に含まれる """ や
   "$" などの特殊文字のクォートは解除されます。 標準に従って、"NAME"、
   "ID"、"PRETTY_NAME" フィールドは必ず定義されます。 それ以外のフィー
   ルドはすべて任意です。 ベンダーが追加のフィールドを含めることもあり
   ます。

   "NAME"、"VERSION"、"VARIANT" などのフィールドは、ユーザに表示するの
   に適した文字列です。 プログラムで Linux ディストリビューションを識
   別するには、"ID"、"ID_LIKE"、"VERSION_ID"、"VARIANT_ID" などのフィ
   ールドを使ってください。

   以下はプログラム例です:

      def get_like_distro():
          info = platform.freedesktop_os_release()
          ids = [info["ID"]]
          if "ID_LIKE" in info:
              # ID はスペースで区切られ、優先順位に従って並んでいます
              ids.extend(info["ID_LIKE"].split())
          return ids

   Added in version 3.10.


Android プラットフォーム
========================

platform.android_ver(release='', api_level=0, manufacturer='', model='', device='', is_emulator=False)

   Android のデバイス情報を取得し、次の属性付きで "namedtuple()" とし
   て返します。決定不能な値は、引数として指定されたデフォルトに設定さ
   れます。

   * "release" - Android バージョンの文字列 (""14"" など) 。

   * "api_level" - 実行中のデバイスの API レベルを表す整数 (Android 14
     なら "34" など) です。 Python のビルド時に使われた API レベルを取
     得するには、"sys.getandroidapilevel()" を参照してください。

   * "manufacturer" - メーカー名 です。

   * "model" - モデル名 です。 通常は販売名または型番です。

   * "device" - デバイス名 です。 通常は型番またはコードネームです。

   * "is_emulator" - デバイスがエミュレーターなら "True"、物理デバイス
     なら "False" です。

   Google は 既知のモデル名とデバイス名の一覧 を管理しています。

   Added in version 3.13.


コマンドラインでの使用
======================

"platform" は、インタープリタの "-m" スイッチを使って直接起動すること
もできます。

   python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]

以下のオプションが使用できます:

--terse

   プラットフォームについての簡潔な情報を表示します。 *terse* 引数を
   "True" にして "platform.platform()" を呼び出すのと同じです。

--nonaliased

   Print platform information without system/OS name aliasing. This is
   equivalent to calling "platform.platform()" with the *aliased*
   argument set to "True".

位置引数 ("terse"、"nonaliased") を一つ以上渡して、出力形式を明示的に
制御することもできます。 これらの動作は、対応するオプションと同様です
。
