はじめに
Pythonでシステム情報を取得したいときに使えるplatformモジュールの使い方をまとめました。OS、アーキテクチャ、Pythonのバージョンなど、実行環境に関する情報を簡単に取得できる標準ライブラリです。著者はgoogle colabで動作確認しました。
基本的なシステム情報の取得
まずは基本的な情報を取得してみましょう。
import platform
# 基本的なシステム情報を表示
print("=== 基本システム情報 ===")
print(f"OS: {platform.system()}")
print(f"OSバージョン: {platform.version()}")
print(f"OS詳細: {platform.platform()}")
print(f"アーキテクチャ: {platform.architecture()}")
print(f"マシン: {platform.machine()}")
print(f"プロセッサ: {platform.processor()}")
Pythonの実行環境情報
次に、Python自体の情報を取得してみます。
import platform
import sys
print("=== Python実行環境情報 ===")
print(f"Pythonバージョン: {platform.python_version()}")
print(f"Python詳細バージョン: {platform.python_version_tuple()}")
print(f"Python実装: {platform.python_implementation()}")
print(f"Pythonコンパイラ: {platform.python_compiler()}")
print(f"Python実行ファイル: {sys.executable}")
ネットワーク情報の取得
システムのネットワーク情報も取得できます。
import platform
import socket
print("=== ネットワーク情報 ===")
print(f"ホスト名: {platform.node()}")
print(f"FQDN: {socket.getfqdn()}")
# IPアドレスの取得(簡易版)
try:
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
print(f"IPアドレス: {ip_address}")
except Exception as e:
print(f"IPアドレス取得エラー: {e}")
活用例:OS別処理の分岐
platformモジュールの実用的な使い方として、OS別の処理分岐を実装してみましょう。
import platform
import os
def get_system_info():
"""システム情報を取得し、OS別の処理を実行"""
system = platform.system()
if system == "Windows":
return {
"os": "Windows",
"separator": "\\",
"clear_command": "cls",
"home_dir": os.environ.get("USERPROFILE", ""),
"temp_dir": os.environ.get("TEMP", "")
}
elif system == "Darwin": # macOS
return {
"os": "macOS",
"separator": "/",
"clear_command": "clear",
"home_dir": os.environ.get("HOME", ""),
"temp_dir": "/tmp"
}
elif system == "Linux":
return {
"os": "Linux",
"separator": "/",
"clear_command": "clear",
"home_dir": os.environ.get("HOME", ""),
"temp_dir": "/tmp"
}
else:
return {
"os": "Unknown",
"separator": "/",
"clear_command": "clear",
"home_dir": "",
"temp_dir": ""
}
# 実行例
info = get_system_info()
print("=== OS別処理結果 ===")
for key, value in info.items():
print(f"{key}: {value}")
詳細なシステム情報の一覧表示
全ての情報をまとめて表示する便利な関数を作成してみましょう。
import platform
import sys
import os
def display_all_platform_info():
"""利用可能なすべてのplatform情報を表示"""
print("=" * 50)
print(" システム情報レポート")
print("=" * 50)
# 基本情報
print("\n【基本システム情報】")
print(f"OS: {platform.system()}")
print(f"OSリリース: {platform.release()}")
print(f"OSバージョン: {platform.version()}")
print(f"プラットフォーム: {platform.platform()}")
# アーキテクチャ情報
print("\n【アーキテクチャ情報】")
print(f"アーキテクチャ: {platform.architecture()}")
print(f"マシン: {platform.machine()}")
print(f"プロセッサ: {platform.processor()}")
# Python情報
print("\n【Python情報】")
print(f"Pythonバージョン: {platform.python_version()}")
print(f"Python実装: {platform.python_implementation()}")
print(f"Pythonコンパイラ: {platform.python_compiler()}")
# ネットワーク情報
print("\n【ネットワーク情報】")
print(f"ホスト名: {platform.node()}")
# 環境変数(重要なもののみ)
print("\n【重要な環境変数】")
important_vars = ['PATH', 'HOME', 'USER', 'SHELL', 'PYTHONPATH']
for var in important_vars:
value = os.environ.get(var, "未設定")
if var == 'PATH':
value = f"{len(value.split(os.pathsep))}個のパスが設定済み"
print(f"{var}: {value}")
print("\n" + "=" * 50)
# 実行
display_all_platform_info()
応用例:環境判定デコレータ
最後に、特定の環境でのみ実行される関数を作成するデコレータを実装してみましょう。
import platform
from functools import wraps
def only_on_os(*allowed_os):
"""指定されたOS上でのみ実行を許可するデコレータ"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
current_os = platform.system()
if current_os in allowed_os:
return func(*args, **kwargs)
else:
print(f"この機能は{allowed_os}でのみ利用可能です。"
f"現在のOS: {current_os}")
return None
return wrapper
return decorator
# 使用例
@only_on_os("Linux", "Darwin")
def unix_only_function():
"""Unix系OSでのみ実行される関数"""
print("Unix系OSで実行中の処理です!")
return "Unix処理完了"
@only_on_os("Windows")
def windows_only_function():
"""Windows専用の関数"""
print("Windows専用の処理です!")
return "Windows処理完了"
# テスト実行
print("=== OS判定デコレータのテスト ===")
result1 = unix_only_function()
result2 = windows_only_function()
print(f"Unix関数結果: {result1}")
print(f"Windows関数結果: {result2}")
まとめ
platformモジュールを使うことで、システム情報を簡単に取得できます。
よく使う関数
-
platform.system(): OS名を取得 -
platform.platform(): 詳細なプラットフォーム情報 -
platform.python_version(): Pythonバージョン -
platform.architecture(): アーキテクチャ情報 -
platform.node(): ホスト名
使用場面
- 環境依存の処理の分岐
- システム情報の収集とログ記録
- 開発環境と本番環境の違いを意識した処理
標準ライブラリなので、追加のインストールは不要です。
参考情報






