ノートPCのバッテリー残量を調べる
Windowsの場合
ctypesモジュールを使って電源関係のWin32 APIを直接呼び出します。
Cでラッパー関数を作って呼び出す方法もありますが、こっちのほうがCコンパイラが必要ないので楽に書けます。
Python2.5よりも前のバージョンでは、ctypesモジュールをhttp://sourceforge.net/projects/ctypes/からダウンロードしてインストールしてください。
from ctypes import windll from ctypes import Structure, byref from ctypes.wintypes import BYTE, LONG class SystemPowerStatus(Structure): _fields_ = [ ('ACLineStatus',BYTE), ('BatteryFlag',BYTE), ('BatteryLifePercent',BYTE), ('Reserved1',BYTE), ('BatteryLifeTime',LONG), ('BatteryFullLifeTime',LONG), ] sps = SystemPowerStatus() windll.kernel32.GetSystemPowerStatus(byref(sps)) print '容量 %4d%%' % sps.BatteryLifePercent if sps.BatteryLifeTime < 0: print '充電中' else: print 'あと %4d分' % (sps.BatteryLifeTime / 60)
Linuxの場合
/proc/acpi/battery/BAT0/stateがあればそれを直接読むか、あるいはacpi.pyを使います。
(編集中...)
FreeBSDの場合
sysctlから情報が得られます。
subprocessでsysctlコマンドを実行して、その標準出力をパーズするのが手軽かもしれません。
$ sysctl hw.acpi.battery hw.acpi.battery.life: 99 hw.acpi.battery.time: 147 hw.acpi.battery.state: 1 hw.acpi.battery.units: 2 hw.acpi.battery.info_expire: 5
ctypesをインストールすれば、次のようにアクセスできます。
from ctypes import * libc = CDLL("libc.so") buf = c_int() size = c_size_t() size.value = sizeof(buf) libc.sysctlbyname("hw.acpi.battery.life", byref(buf), byref(size), None, 0) print buf.value