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

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

udisks --show-info /dev/sda1

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

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

【问题讨论】:

    标签: python linux udev


    【解决方案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

    【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      相关资源
      最近更新 更多