2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[備忘録] Python platformモジュールでシステム情報を取得する方法まとめ

Posted at

はじめに

image.png

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()}")

image.png

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}")

image.png

ネットワーク情報の取得

システムのネットワーク情報も取得できます。

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}")

image.png

活用例: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}")

image.png

詳細なシステム情報の一覧表示

全ての情報をまとめて表示する便利な関数を作成してみましょう。

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()

image.png

応用例:環境判定デコレータ

最後に、特定の環境でのみ実行される関数を作成するデコレータを実装してみましょう。

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}")

image.png

まとめ

platformモジュールを使うことで、システム情報を簡単に取得できます。

よく使う関数

  • platform.system(): OS名を取得
  • platform.platform(): 詳細なプラットフォーム情報
  • platform.python_version(): Pythonバージョン
  • platform.architecture(): アーキテクチャ情報
  • platform.node(): ホスト名

使用場面

  • 環境依存の処理の分岐
  • システム情報の収集とログ記録
  • 開発環境と本番環境の違いを意識した処理

標準ライブラリなので、追加のインストールは不要です。

参考情報

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?