我有一个用 python 编写的程序,它使用 dbus 来检测插入的 USB 驱动器,并在检测到它们时打印它们安装的目录。这是代码:
导入dbus
导入对象
进口舒蒂尔
导入操作系统
导入子流程
进口时间
类 DeviceAddedListener:
def __init__(self):
self.bus = dbus.SystemBus()
self.hal_manager_obj = self.bus.get_object(
"org.freedesktop.Hal",
“/org/freedesktop/Hal/经理”)
self.hal_manager = dbus.Interface(self.hal_manager_obj,
“org.freedesktop.Hal.Manager”)
self.hal_manager.connect_to_signal("DeviceAdded", self._filter)
def _filter(self, udi):
device_obj = self.bus.get_object ("org.freedesktop.Hal", udi)
device = dbus.Interface(device_obj, "org.freedesktop.Hal.Device")
if device.QueryCapability("volume"):
返回 self.do_something(device)
def do_something(自我,音量):
device_file = volume.GetProperty("block.device")
label = volume.GetProperty("volume.label")
fstype = volume.GetProperty("volume.fstype")
mount = volume.GetProperty("volume.is_mounted")
mount_point = volume.GetProperty("volume.mount_point")
尝试:
size = volume.GetProperty("volume.size")
除了:
大小 = 0
p1 = subprocess.Popen(["df", "-h"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", device_file], stdin=p1.stdout, stdout=subprocess.PIPE)
p3 = subprocess.Popen(["awk", "{ print $6 }"], stdin=p2.stdout, stdout=subprocess.PIPE)
路径 = p3.communicate()[0]
打印路径
如果 __name__ == '__main__':
从 dbus.mainloop.glib 导入 DBusGMainLoop
DBusGMainLoop(set_as_default=True)
循环 = gobject.MainLoop()
DeviceAddedListener()
循环运行()
问题是当我打印路径变量(usb 的挂载点)时,它会打印一个空字符串。但是,当我在 python 交互式解释器中执行这些相同的命令(Popen() 等)时,它会很好地打印路径(/media/03CB-604C)。为什么会出现这种情况?对我的代码的任何编辑/建议将不胜感激。提前致谢!