列出使用python和udisk2的USB驱动器的详细信息

2024-04-28 20:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个应用程序,它使用udiskversion1来查找和列出连接的USB驱动器的详细信息。详细信息包括设备(/dev/sdb1…等)、装入点和可用空间。但是,我发现现代发行版默认安装了udisks2。这是在另一个上面找到的小代码螺纹:-在

#!/usr/bin/python2.7
import dbus
bus = dbus.SystemBus()
ud_manager_obj = bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2')
om = dbus.Interface(ud_manager_obj, 'org.freedesktop.DBus.ObjectManager')
for k,v in om.GetManagedObjects().iteritems():
  drive_info = v.get('org.freedesktop.UDisks2.Drive', {})
  if drive_info.get('ConnectionBus') == 'usb' and drive_info.get('Removable'):
    if drive_info['MediaRemovable']:
      print("Device Path: %s" % k)

它产生:在

[sundar@arch ~]$ ./udisk2.py Device Path: /org/freedesktop/UDisks2/drives/JetFlash_Transcend_8GB_GLFK4LYSFG3HZZ48

上面的结果很好,但是我如何连接org.freedesktop.UDisks2.Block并获得设备的属性?在

http://udisks.freedesktop.org/docs/latest/gdbus-org.freedesktop.UDisks2.Block.html


Tags: orginfoobjgetifdevicemanager详细信息
2条回答

编辑 请注意,Block对象没有ConnectionBus或{}属性。您必须更改代码以删除对Drive对象属性的引用才能使代码正常工作。 /编辑

如果要连接到Block,而不是{},则

drive_info = v.get('org.freedesktop.UDisks2.Drive', {})

试试看

^{pr2}$

然后可以迭代drive_info并输出其属性。例如,要获取Id属性,可以:

print("Id: %s" % drive_info['Id'])

我确信有一种很好的pythonic方法来遍历所有属性键/值对并显示值,但我将留给您。Key是'Id',value是存储在drive_info['Id']中的字符串。祝你好运

经过多次的打击和审判,我可以得到我想要的。只是把它贴出来,以便将来有人能从中受益。这是代码:-在

#!/usr/bin/python2.7
# coding: utf-8
import dbus


def get_usb():
    devices = []
    bus = dbus.SystemBus()
    ud_manager_obj = bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2')
    om = dbus.Interface(ud_manager_obj, 'org.freedesktop.DBus.ObjectManager')
    try:
        for k,v in om.GetManagedObjects().iteritems():
            drive_info = v.get('org.freedesktop.UDisks2.Block', {})
            if drive_info.get('IdUsage') == "filesystem" and not drive_info.get('HintSystem') and not drive_info.get('ReadOnly'):
                device = drive_info.get('Device')
                device = bytearray(device).replace(b'\x00', b'').decode('utf-8')
                devices.append(device)
    except:
        print "No device found..."
    return devices



def usb_details(device):
    bus = dbus.SystemBus()
    bd = bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2/block_devices%s'%device[4:])
    try:
        device = bd.Get('org.freedesktop.UDisks2.Block', 'Device', dbus_interface='org.freedesktop.DBus.Properties')
        device = bytearray(device).replace(b'\x00', b'').decode('utf-8')
        print "printing " + device
        label = bd.Get('org.freedesktop.UDisks2.Block', 'IdLabel', dbus_interface='org.freedesktop.DBus.Properties')
        print 'Name od partition is %s'%label
        uuid = bd.Get('org.freedesktop.UDisks2.Block', 'IdUUID', dbus_interface='org.freedesktop.DBus.Properties')
        print 'UUID is %s'%uuid
        size = bd.Get('org.freedesktop.UDisks2.Block', 'Size', dbus_interface='org.freedesktop.DBus.Properties')
        print 'Size is %s'%uuid
        file_system =  bd.Get('org.freedesktop.UDisks2.Block', 'IdType', dbus_interface='org.freedesktop.DBus.Properties')
        print 'Filesystem is %s'%file_system
    except:
        print "Error detecting USB details..."

完整的块设备属性可以在这里找到http://udisks.freedesktop.org/docs/latest/gdbus-org.freedesktop.UDisks2.Block.html

相关问题 更多 >