如何安装"安装在"在python中用于外部设备

时间:2014-07-23 14:45:35

标签: python usb mount

我试图在python中检测覆盆子pi上的所有USB笔式驱动器。我想要他们所有的坐骑位置。我已经检查了APi,但我无法找到如何为设备选择安装点。

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')
  output=[]
  for dev in ud_manager.EnumerateDevices():
    device_obj = bus.get_object("org.freedesktop.UDisks", dev)
    device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)

    if device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsRemovable"):
      temp = []
      **## HOW DO I GET THE MOUNTED ON I SEE IN df -h ?**
      output.append(temp)
  return output

这就是我需要的:

Filesystem      Size  Used Avail Use% Mounted on
rootfs          2.6G  2.2G  313M  88% /
/dev/root       2.6G  2.2G  313M  88% /
devtmpfs        112M     0  112M   0% /dev
tmpfs            24M  228K   23M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sdb1        15G  581M   15G   4% **/media/usb0**  <--- I need these
tmpfs            47M     0   47M   0% /run/shm
/dev/mmcblk0p1   56M  9.5M   47M  17% /boot
/dev/sda        3.8G  1.1M  3.8G   1% **/media/usb1**  <--- I need these

对于每个外部USB设备,我想要一个包含以下信息的阵列: [制造商,总尺寸人类可读(GB),安装点第一分区,总大小(KB),可用大小(KB)]

编辑:

我将代码更改为:

def USBDEVICES():
  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')
  output=[]
  for dev in ud_manager.EnumerateDevices():
    device_obj = bus.get_object("org.freedesktop.UDisks", dev)
    device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)

    if device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsRemovable"):
      temp = []
      temp.append(str(device_props.Get('org.freedesktop.UDisks.Device', "DriveVendor")))
      temp.append(str(math.ceil(device_props.Get('org.freedesktop.UDisks.Device', "PartitionSize")/1048576.0)/1000)+' GB')
      temp.append(device_props.Get('org.freedesktop.UDisks.Device', "DeviceIsMounted"))
      temp.append(device_props.Get('org.freedesktop.UDisks.Device','DeviceMountPaths'))
      output.append(temp)
  print output

我希望得到这个输出:

[[&#39; TDKMedia&#39;,&#39; 15.255 GB&#39;,True,&#39; / media / usb0&#39;],[&#39; Sony&#39;,& #39; 3.812 GB&#39;,True,&#39; / media / usb1&#39;]

但我得到了这个:

[[&#39; TDKMedia&#39;,&#39; 15.255 GB&#39;,dbus.Boolean(False,variant_level = 1),dbus.Array([],signature = dbus.Signature(&# 39; s&#39;),variant_level = 1)],[&#39; USB2.0&#39;,&#39; 3.812 GB&#39;,dbus.Boolean(True,variant_level = 1),dbus.Array ([dbus.String(u&#39; / media / usb1&#39;)],signature = dbus.Signature(&#39; s&#39;),variant_level = 1)]]

没有TDKMedia USB驱动器的安装路径和其他USB驱动器的奇怪之处。 但是当我看到df时,它表示TDK已安装......:/

由于主要问题已经解决,我已经为未安装的问题打开了一个新主题:https://stackoverflow.com/questions/24928984/python-dbus-acting-weird

1 个答案:

答案 0 :(得分:1)

根据org.freedesktop.UDisks.Device documentationDevice有以下属性:

  

DeviceIsMounted属性

     
    

TRUE如果设备已安装。

  
     

DeviceMountPaths属性

     
    

设备根目录的根命名空间中的路径列表     安装。仅当DeviceIsMountedTRUE时,此属性才有效。

  

唉我无法核实,但是下面的内容应当有效:

if (device_props.Get('org.freedesktop.UDisks.Device', 'DeviceIsRemovable') and
        device_props.Get('org.freedesktop.UDisks.Device', 'DeviceIsMounted')):
    output.extend(device_props.Get('org.freedesktop.UDisks.Device',
                                   'DeviceMountPaths'))