如何在Linux/树莓派下用Python读取硬盘电源状态?
用Python通过UDisks2 D-Bus读取硬盘电源状态(Linux/树莓派)
要读取硬盘的电源状态(active/standby/sleep),你可以通过UDisks2的D-Bus接口调用org.freedesktop.UDisks2.Drive.Ata.PmGetState方法,以下是完善后的代码实现:
完整代码
from pydbus import SystemBus def get_drive_power_state(drive_path): bus = SystemBus() try: # 获取硬盘对应的D-Bus对象 drive_obj = bus.get("org.freedesktop.UDisks2", drive_path) # 调用ATA电源状态查询方法 state_code = drive_obj.PmGetState() # 映射状态码到可读的文字描述 state_map = { 0: "Active/Idle", 1: "Standby", 2: "Sleep" } return state_map.get(state_code, f"Unknown state ({state_code})") except Exception as e: return f"Error: {str(e)}" # 替换为你的硬盘对象路径 drive_path = "/org/freedesktop/UDisks2/drives/WDC_WD20NMVW_11EDZS3_WD_WXV1EA57RT6E" power_state = get_drive_power_state(drive_path) print(f"Drive Power State: {power_state}")
关键说明
- 硬盘对象路径:确保
drive_path是你目标硬盘的正确对象路径,可通过udisksctl status命令查看系统中挂载的硬盘信息获取。 - 方法调用逻辑:
PmGetState()属于org.freedesktop.UDisks2.Drive.Ata接口,pydbus会自动将D-Bus接口方法映射为对象的可调用方法,直接调用即可返回状态码。 - 状态码对应关系:
- 0:Active/Idle(硬盘处于活动或空闲状态)
- 1:Standby(硬盘进入待机状态,转速降低)
- 2:Sleep(硬盘进入休眠状态,完全停止运转)
- 异常处理:捕获可能的错误(如路径无效、硬盘不支持ATA电源管理、权限不足等),避免程序直接崩溃。
内容的提问来源于stack exchange,提问作者Marus Gradinaru
相关产品推荐
相关产品推荐

