我试图在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
答案 0 :(得分:1)
根据org.freedesktop.UDisks.Device
documentation,Device
有以下属性:
DeviceIsMounted
属性
TRUE
如果设备已安装。
DeviceMountPaths
属性设备根目录的根命名空间中的路径列表 安装。仅当
DeviceIsMounted
为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'))