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

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

platform --- 実行中プラットフォームの固有情報を参照する — Python 3.7.2 ドキュメント

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

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

引数terseをTrueとすると最小限の情報のみが返されます。

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

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

Darwin (オペレーティングシステム) - Wikipedia Darwin (operating system) - Wikipedia

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

platform.mac_ver() --- 実行中プラットフォームの固有情報を参照する — Python 3.7.2 ドキュメント

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でサービスパックの状況も取得できます。

platform.win32_ver() --- 実行中プラットフォームの固有情報を参照する — Python 3.7.2 ドキュメント

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)が返されます。

platform.linux_distribution() --- 実行中プラットフォームの固有情報を参照する — Python 3.7.2 ドキュメント

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

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

nir0s/distro: A much more elaborate, renewed alternative implementation for Python's platform.linux_distribution()

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

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

Last Updated: 6/26/2019, 10:34:03 PM