Windows のシステム情報や環境変数を、Python の標準モジュールを使って取得します。また、ファイルやフォルダの更新日時・サイズなどを取得する方法についても取り上げています。
動作確認環境:Windows10 64bit、Python 3.8.6
1. Windows のシステム情報
CPUやOSの情報、MACアドレスなどです。取得した値を print 関数で表示したときの例も載せています。
使用する関数に応じて、必要なモジュールのみ import して使ってください。同様の情報が得られるものは、コメントで併記しています。
from multiprocessing import cpu_count
from os import getenv
from platform import machine, node, platform, processor, release, system, version
from socket import gethostbyname, gethostname
from uuid import getnode
# ==============================
_node = node() # ネットワーク名
print(f'Network: {_node}') # Network: Kitchen
_machine = machine() # 機種
# _machine = getenv('PROCESSOR_ARCHITECTURE')
print(f'Machine: {_machine}') # Machine: AMD64
_processor = processor() # プロセッサ名 (CPU)
# _processor = getenv('PROCESSOR_IDENTIFIER')
print(f'Processor: {_processor}') # Processor: Intel64 Family 6 Model 158 Stepping 12, GenuineIntel
_cpu_count = cpu_count() # CPU数
# _cpu_count = getenv('NUMBER_OF_PROCESSORS')
print(f'CPU count: {_cpu_count}') # CPU count: 6
_proc_level = getenv('PROCESSOR_LEVEL') # CPUファミリー
print(f'Processor level: {_proc_level}') # Processor level: 6
_proc_revision = getenv('PROCESSOR_REVISION') # CPUリビジョン
print(f'Processor revision: {_proc_revision}') # Processor revision: 9e0c
_platform = platform() # プラットフォーム (OS) 情報
print(f'Platform: {_platform}') # Platform: Windows-10-10.0.18362-SP0
_system = system() # OS名
print(f'System: {_system}') # System: Windows
_release = release() # リリース情報
print(f'Release: {_release}') # Release: 10
_version = version() # バージョン情報
print(f'Version: {_version}') # Version: 10.0.18362
_mac = getnode() # MACアドレス
print(f'MAC Address: {_mac:_X}') # MAC Address: ABCD_EF01_2345
_host_name = gethostname() # ホスト名
print(f'Host name: {_host_name}') # Host name: Kitchen
_ip = gethostbyname(_host_name) # IPアドレス
print(f'IP Address: {_ip}') # IP Address: 192.168.100.100
MACアドレスやIPアドレスは、複数存在することがあります。上記の関数では、そのうちの1つしか取得できませんのでご注意ください。
2. Windows の環境変数
環境変数は、os モジュールの getenv 関数で取得します。上で出てきたもの以外を示します。
from os import getenv
# from pathlib import Path
# from tempfile import gettempdir
# ==============================
_computer_name = getenv('COMPUTERNAME') # コンピュータ名
print(f'Computer name: {_computer_name}') # Computer name: Kitchen
_user_domain = getenv('USERDOMAIN') # ドメイン名
print(f'User domain: {_user_domain}') # User domain: Kitchen
_user_name = getenv('USERNAME') # ユーザー名
print(f'User name: {_user_name}') # User name: ユーザー名
_user_profile = getenv('USERPROFILE') # ユーザープロファイル
# _user_profile = Path.home()
print(f'User profile: {_user_profile}') # User profile: C:\Users\ユーザー名
_appdata = getenv('APPDATA') # Roaming フォルダ
print(f'Roaming: {_appdata}') # Roaming: C:\Users\ユーザー名\AppData\Roaming
_local_appdata = getenv('LOCALAPPDATA') # Local フォルダ
print(f'Local: {_local_appdata}') # Local: C:\Users\ユーザー名\AppData\Local
_temp = getenv('TEMP') # Temp フォルダ
# _temp = gettempdir()
print(f'Temp: {_temp}') # Temp: C:\Users\ユーザー名\AppData\Local\Temp
_program_files = getenv('PROGRAMFILES') # Program Files フォルダ
print(f'Program Files: {_program_files}') # Program Files: C:\Program Files
_program_files_86 = getenv('PROGRAMFILES(X86)') # Program Files (x86) フォルダ
print(f'Program Files (x86): {_program_files_86}') # Program Files (x86): C:\Program Files (x86)
_root = getenv('SystemRoot') # Windows フォルダ
print(f'Root: {_root}') # Root: C:\WINDOWS
3. ファイルやフォルダの情報
作成日時や更新日時、サイズ等を取得します。Windows ではあまり意味のない項目もありますが、取得できるものは載せておきました。
from datetime import datetime
from pathlib import Path
from stat import filemode
# ==============================
# ------------------------------ パスの指定
_path = Path(__file__) # 例として、実行している py ファイルを指定
# _path = Path.cwd() # こちらの例では、カレントディレクトリを指定
# ------------------------------ サイズ
_size = 0
if _path.is_dir(): # ディレクトリサイズ
for i in _path.glob('**/*'):
try:
_size += i.stat().st_size
except PermissionError as err: # アクセス権がないときのエラー
print(f'{err.__class__.__name__}: {err}\n {i}')
elif _path.is_file(): # ファイルサイズ
_size = _path.stat().st_size
print(f'Size: {_size:,} byte') # Size: 2,524 byte
# ------------------------------ ステータス
_stat = _path.stat()
_create = datetime.fromtimestamp(_stat.st_ctime) # 作成時刻
_create_ns = _stat.st_ctime_ns # 作成時刻 (ナノ秒)
print(f'Create: {_create}') # Create: 2020-09-25 14:03:19.830000
print(f'Create_ns: {_create_ns}') # Create_ns: 1601010199830000000
_modify = datetime.fromtimestamp(_stat.st_mtime) # 更新時刻
_modify_ns = _stat.st_mtime_ns # 更新時刻 (ナノ秒)
print(f'Modify: {_modify}') # Modify: 2020-09-26 11:55:22
print(f'Modify_ns: {_modify_ns}') # Modify_ns: 1601088922000000000
_access = datetime.fromtimestamp(_stat.st_atime) # アクセス時刻
_access_ns = _stat.st_atime_ns # アクセス時刻 (ナノ秒)
print(f'Access: {_access}') # Access: 2020-09-26 11:55:22
print(f'Access_ns: {_access_ns}') # Access_ns: 1601088922000000000
_mode = filemode(_stat.st_mode) # モード (権限) [-d]rwxrwxrwx
print(f'Mode: {_mode}') # Mode: -rw-rw-rw-
_index = _stat.st_ino # インデックス番号
print(f'Index: {_index}') # Index: 1234567890
_device = _stat.st_dev # パスが存在するデバイスの識別子
print(f'Device: {_device}') # Device: 9876543210
_nlink = _stat.st_nlink # ハードリンクの数
print(f'Hard link: {_nlink}') # Hard link: 1
_user_id = _stat.st_uid # ファイル所有者のユーザー識別子
print(f'User ID: {_user_id}') # User ID: 0
_group_id = _stat.st_gid # ファイル所有者のグループ識別子
print(f'Group ID: {_group_id}') # Group ID: 0