python udisks - 枚举设备信息
显然,我们可以通过一个叫做 udisks 的程序获取很多关于连接硬盘的信息:
udisks --show-info /dev/sda1
udisks 这个工具实际上就是在列出 udev 提供的数据。
那么,使用 Python 能不能获取这些信息呢?比如说,我只想拿到设备的序列号、挂载点和大小。
2 个回答
2
如果其他方法都不行,你可以尝试解析一下udisks
的输出。下面是一个用Python 3.2写的示例脚本:
from subprocess import check_output as qx
from configparser import ConfigParser
def parse(text):
parser = ConfigParser()
parser.read_string("[DEFAULT]\n"+text)
return parser['DEFAULT']
def udisks_info(device):
# get udisks output
out = qx(['udisks', '--show-info', device]).decode()
# strip header & footer
out = out[out.index('\n')+1:]
i = out.find('=====')
if i != -1: out = out[:i]
return parse(out)
info = udisks_info('/dev/sda1')
print("size = {:.2f} GiB".format(info.getint('size')/2**30))
print("""mount point = {mount paths}
uuid = {uuid}""".format_map(info))
# complex values could be parsed too
info = udisks_info('/dev/sda')
drive_data = info['drive'].replace('ports:\n', 'ports:\n ')
print('serial =', parse(drive_data)['serial'])
输出结果
size = 57.15 GiB
mount point = /
uuid = b1812c6f-3ad6-40d5-94a6-1575b8ff02f0
serial = N31FNPH8
16
你可以直接在Python中通过dbus使用Udisks。
import dbus
bus = dbus.SystemBus()
ud_manager_obj = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks')
for dev in ud_manager.EnumerateDevices():
device_obj = bus.get_object("org.freedesktop.UDisks", dev)
device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)
print device_props.Get('org.freedesktop.UDisks.Device', "DriveVendor")
print device_props.Get('org.freedesktop.UDisks.Device', "DeviceMountPaths")
print device_props.Get('org.freedesktop.UDisks.Device', "DriveSerial")
print device_props.Get('org.freedesktop.UDisks.Device', "PartitionSize")
所有可用属性的完整列表在这里 http://hal.freedesktop.org/docs/udisks/Device.html