python udisks - 枚举设备信息

Posted

技术标签:

【中文标题】python udisks - 枚举设备信息【英文标题】:python udisks - enumerating device information 【发布时间】:2011-07-01 07:42:13 【问题描述】:

使用 udisks 二进制文件显然可以获得很多与附加磁盘相关的信息:

udisks --show-info /dev/sda1

udisks 显然只是在枚举 udev 可用的数据。

是否可以使用 python 获取这些信息?例如,如果我只想检索设备序列号、挂载点和大小。

【问题讨论】:

【参考方案1】:

你可以直接在python中通过dbus使用Udisk。

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

【讨论】:

链接断开,这似乎类似:udisks.freedesktop.org/docs/1.0.5/Device.html【参考方案2】:

如果一切都失败了,您可以解析udisks 的输出。这是 Python3.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

【讨论】:

以上是关于python udisks - 枚举设备信息的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上弹出 USB 设备

最小LINUX系统下U盘的挂载及卸载

Linux中U盘和SD卡加载卸载命令

usb枚举

FFmpeg采集设备(3)

stm32f4 USB项目开发详解