【发布时间】:2014-09-14 19:47:28
【问题描述】:
我正在尝试在 python 中检测我的树莓派上的所有 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 设备,我想要一个包含以下信息的数组: [manufacturer,total size Human readable (GB), mount point first partition, total size in KB,available size in 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.255 GB',True,'/media/usb0'],['Sony', '3.812 GB',True,'/media/usb1']
但是我得到了这个:
[['TDKMedia', '15.255 GB', dbus.Boolean(False, variant_level=1), dbus.Array([], signature=dbus.Signature('s'), variant_level=1)], [ 'USB2.0', '3.812 GB', dbus.Boolean(True, variant_level=1), dbus.Array([dbus.String(u'/media/usb1')], signature=dbus.Signature('s' ), variant_level=1)]]
没有 TDKMedia USB 驱动器的挂载路径,而另一个 USB 驱动器则有些奇怪。 但是当我查看 df 时,它说 TDK 已安装...:/
由于主要问题已经解决,我为未安装问题开辟了一个新主题:https://stackoverflow.com/questions/24928984/python-dbus-acting-weird
【问题讨论】:
-
解析
mount或df的输出是一个选项吗? -
我想是的,但我只需要外部 USB 设备,我完全不知道如何做到这一点(Linux 和 python 的新手),我还希望每个外部 USB 设备都有一个具有以下信息的数组:[制造商,总大小人类可读(GB),挂载点第一个分区,总大小(KB),可用大小(KB)]