如何在python中为外部设备“挂载”

2024-04-28 19:47:35 发布

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

我正在用python检测我的raspberry 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

这就是我需要的:

^{pr2}$

对于每个外部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

我希望得到这个输出:

[['TDKMedia','15.255GB',True,'/media/usb0',['Sony','3.812 GB',True,'/media/usb1']

但我得到的却是:

[['TDKMedia','15.255 GB',dbus布尔型(错误,变量_级别=1),dbus.数组([]),签名=dbus.签名('s'),变量_level=1)],['USB2.0','3.812 GB',dbus布尔型(正确,变量_级别=1),dbus.数组([dbus.字符串(u'/media/usb1')],签名=dbus.签名('s'),变量级别=1)]]

TDKMedia USB驱动器没有安装路径,另一个USB驱动器有点奇怪。 但当我看到测向仪时,它说TDK已经安装好了。。。:/

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


Tags: orgobjoutputgetdevicemanagerpropstemp
1条回答
网友
1楼 · 发布于 2024-04-28 19:47:35

根据^{} documentation,a Device有以下属性:

The DeviceIsMounted property

TRUE if the device is mounted.

DeviceMountPaths属性

A list of paths in the root namespace where the root of the device is mounted. This property is only valid if DeviceIsMounted is TRUE.

唉,我无法证实,但以下几点应该会奏效:

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'))

相关问题 更多 >