[解決!Python]プログラムを実行しているプラットフォームを判別するには:解決!Python
osモジュールのname属性や、sysモジュールのplatform属性、platformモジュールのplatform関数などを使って、プログラムを実行しているプラットフォームを判別する方法を紹介する。
属性/関数 | 説明 |
---|---|
os.name属性 | 'posix'/'nt'/'java'のいずれかが返される |
os.uname関数 | OS名/マシン名/OSのリリース/OSバージョン/ハードウェア識別子が返される。Unix環境でのみ使用可能 |
sys.platform属性 | プログラムを実行中のプラットフォームを識別する文字列が返される。'emscripten'/'linux'/'wasi'/'win32'/'cygwin'/'darwin'など。バージョンが末尾に付加される場合もある |
platform.platform関数 | プログラムを実行中のプラットフォームを識別する文字列が返される。sys.platform属性よりも多くの情報を含む |
プラットフォームを判別するために使える属性/関数 |
プラットフォームを判別するために使える属性/関数
Pythonではプログラムを実行しているOS/プラットフォームを判別するために幾つかのモジュールでさまざまな属性や関数が提供されている。
- osモジュール:os.name属性とos.uname関数
- sysモジュール:sys.platform属性
- platformモジュール:platform.platform属性
これらのうち、os.uname関数についてはUnix環境でのみ使用可能であり、Windows環境には提供されていないことには注意しよう。
os.name属性とos.uname関数
プログラムを実行しているのがWindows環境かUnix環境(POSIX環境)かを知るだけであれば、os.name属性を用いるのが簡単だ。
import os
if os.name == 'posix':
print('in posix')
elif os.name == 'nt':
print('in windows')
else:
print('another')
macOSとWindowsで上記コードを実行すると(もちろん)次のような結果となる。
より詳細な情報を得る必要があれば、os.uname関数が使えるが、既に述べた通り、これはUnix系統のOSでのみ使用可能であることには注意が必要だ。
os.uname関数は以下の5つの情報を含むposix.uname_resultオブジェクトを返送する。以下の情報はタプルもしくは箇条書きに示した属性名を使用してアクセスできる。タプルの要素としてアクセスする場合は、以下の箇条書きの上から0番目、1番目、……のようになっている。
- sysname属性:OS名
- nodename属性:プログラムを実行しているマシンのネットワーク上でのマシン名
- release属性:OSのリリースバージョン
- version属性:OSのバージョン
- machine属性:ハードウェア識別子
使用例を以下に示す。
import os
info = os.uname()
print(info.sysname) # OS名を表示
print(info[3]) # OSのバージョンを表示
これをmacOS環境で実行した結果を以下に示す。
sys.platform属性
sys.platform属性はプラットフォームを識別する文字列になっている。Windows/macOS/Linuxでは以下のような値となる。他の環境での値についてはドキュメントを参照されたい。
- Windows:'win32'
- macOS:'darwin'
- Linux:'linux'
例えば、以下のようなコードがあったとする。
import sys
print(sys.platform)
これをmacOSとWindowsで実行した結果を以下に示す。
platform.platform関数
platform.platform関数はプログラムを実行しているプラットフォームを識別する文字列を返送する。sys.platform属性と異なるのは、OS名、バージョン、ハードウェアアーキテクチャのような詳細な情報が含まれる点だ。
import platform
info = platform.platform()
print(info)
上記のコードをmacOSとWindowsで実行した結果を以下に示す。
なお、platform.platform関数にはaliasedパラメーターとterseパラメーターを指定できる。前者に真となる値を指定すると、別名が定義されている場合にはそれを返送する。後者に真となる値を指定すると、プラットフォームを識別するのに必要となる最低限の情報だけを返送する。
例として、macOSでterse=1を指定してこの関数を呼び出した結果を以下に示す。
クロスプラットフォームでOSとバージョンを取得したいというときにはこの関数が役立つだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.