note.nkmk.me

Pythonが実行されている環境のOSやバージョン情報などを取得

Date: 2019-02-02 / tags: Python

Pythonが実行されている環境のOSやそのバージョン(リリース)情報などを取得するには標準ライブラリのplatformモジュールを使う。OSやバージョンごとに処理を切り替えることが可能。

ここでは以下の内容について説明する。

  • OS名を取得: platform.system()
  • バージョン(リリース)情報を取得: platform.release(), version()
  • OSとバージョンをまとめて取得: platform.platform()
  • 各OSでの結果の例
    • macOS
    • Windows
    • Ubuntu
  • OSによって処理を切り替えるサンプルコード

実行中のPythonのバージョンを知りたい場合は以下の記事を参照。

前半のサンプルコードはすべてmacOS Mojave 10.14.2で実行したもの。WindowsやUbuntuでの結果の例は後半で示している。OS固有の関数についても後半であわせて述べる。

スポンサーリンク

OS名を取得: platform.system()

OS名はplatform.system()で取得する。返り値は文字列。

import platform

print(platform.system())
# Darwin

バージョン(リリース)情報を取得: platform.release(), version()

OSのバージョン(リリース)情報はplatform.release()およびplatform.version()で取得する。どちらも返り値は文字列。

以下の例のようにplatform.release()のほうがシンプルな内容が返る。

print(platform.release())
# 18.2.0

print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64

OSとバージョンをまとめて取得: platform.platform()

OS名およびバージョン(リリース)情報はplatform.platform()でまとめて取得できる。返り値は文字列。

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

引数terseTrueとすると最小限の情報のみが返される。

print(platform.platform(terse=True))
# Darwin-18.2.0

引数aliasedもある。

print(platform.platform(aliased=True))
# Darwin-18.2.0-x86_64-i386-64bit

例の環境では変わらない結果だが、OSによってはOS名として別名が返されるとのこと。

aliased が真なら、システムの名称として一般的な名称ではなく、別名を使用して結果を返します。たとえば、SunOS は Solaris となります。
platform.platform() --- 実行中プラットフォームの固有情報を参照する — Python 3.7.2 ドキュメント

各OSでの結果の例

macOS, Windows, Ubuntuでの結果の例を示す。OS固有の関数についてもあわせて紹介する。

macOS

macOS Mojave 10.14.2での結果の例。上で示した例と同じ。

print(platform.system())
# Darwin

print(platform.release())
# 18.2.0

print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

macOSMojaveではなくDarwinとなるので注意。DarwinについてはWikipediaのページなどを参照。最新のバージョン番号とmacOSにおける名称の対応は英語版を参照。

madOS固有の関数としてplatform.mac_ver()がある。タプル(release, versioninfo, machine)が返される。例の環境ではversioninfoが不明で空文字列のタプルとなっている。

print(platform.mac_ver())
# ('10.14.2', ('', '', ''), 'x86_64')

Windows

Windows 10 Homeでの結果の例。

print(platform.system())
# Windows

print(platform.release())
# 10

print(platform.version())
# 10.0.17763

print(platform.platform())
# Windows-10-10.0.17763-SP0

platform.release()の返り値10は整数ではなく文字列なので注意。

Windows固有の関数としてplatform.win32_ver()がある。タプル(release, version, csd, ptype)が返される。csdでサービスパックの状況も取得できる。

print(platform.win32_ver())
# ('10', '10.0.17763', 'SP0', 'Multiprocessor Free')

Ubuntu

Ubuntu 18.04.1 LTSでの結果の例。

print(platform.system())
# Darwin

print(platform.release())
# 18.2.0

print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

Unix固有の関数としてplatform.linux_distribution()がある。タプル(distname, version, id)が返される。

print(platform.platform(terse=True))
# Darwin-18.2.0

この関数はPython3.8で削除予定となっているので注意。代わりにサードパーティライブラリdistroの使用が推奨されている。pipなどで別途インストールする必要がある。

import distro

distro.linux_distribution()

OSによって処理を切り替えるサンプルコード

OSによって使用する関数やメソッドを切り替えたい場合はplatform.system()などの値を判定する方法がある。

ファイルの更新日時を取得する例を示す。

def creation_date(path_to_file):
    """
    Try to get the date that a file was created, falling back to when it was
    last modified if that isn't possible.
    See http://stackoverflow.com/a/39501288/1709587 for explanation.
    """
    if platform.system() == 'Windows':
        return os.path.getctime(path_to_file)
    else:
        stat = os.stat(path_to_file)
        try:
            return stat.st_birthtime
        except AttributeError:
            # We're probably on Linux. No easy way to get creation dates here,
            # so we'll settle for when its content was last modified.
            return stat.st_mtime
source: os_stat.py

この例では、まずplatform.system()の値でWindowsかそれ以外かを判定し、さらに例外処理を利用してst_birthtime属性が存在する場合とそれ以外で処理を切り替えている。

例外処理については以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事