我很抱歉如果问题看起来很愚蠢,但我对Linux和Python都很陌生。我的问题是需要编写一个Python脚本,它可以检测连接的USB设备并向其写入文件。我使用的是OpenSUSE(但在理想情况下,该脚本应适用于任何Linux发行版)。目前版本只有在USB被挂载时才能检测到它并写入文件。但在我的计算机上,只有当我在文件管理器中浏览它时,USB才会被挂载。在此之前,USB被检测为分区但没有挂载点。那么,我该如何强制系统挂载USB或如何通过devname、devpath或从hal管理器获取的其他信息来写入文件?我不能使用“mount”命令,因为它需要root权限。
简化源代码:
插入USB时的输出结果。
连接并挂载USB时的输出结果。
感谢您的帮助!
简化源代码:
import dbus, gobject, os
class DeviceAddedListener:
def __init__(self):
self.bus = dbus.SystemBus()
self.hal_manager_obj = self.bus.get_object( "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
self.hal_manager = dbus.Interface(self.hal_manager_obj, "org.freedesktop.Hal.Manager")
self.hal_manager.connect_to_signal("DeviceAdded", self.added)
def show(self, name, udi):
d_object = self.bus.get_object('org.freedesktop.Hal', udi)
d_interface = dbus.Interface(d_object,'org.freedesktop.Hal.Device')
if d_interface.QueryCapability("volume"):
print name
props = [ "block.device", "volume.label", "volume.is_mounted", "volume.mount_point", "volume.size"]
for p in props:
print '\t', p, " = ",
try:
print d_interface.GetProperty(p)
except:
print "Fail"
def added(self, udi):
self.show("DeviceAdded", udi)
self.bus.add_signal_receiver(self.property_modified,
"PropertyModified",
"org.freedesktop.Hal.Device",
"org.freedesktop.Hal",
udi,
path_keyword = "sending_device" )
def property_modified(self, numupdates, updates, sending_device = None):
self.show("PropertyModified", sending_device)
if __name__ == '__main__':
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
DeviceAddedListener()
print "running"
loop.run()
插入USB时的输出结果。
DeviceAdded
block.device = /dev/sdb1
volume.label = @
volume.is_mounted = 0
volume.mount_point =
volume.size = 4009722368
连接并挂载USB时的输出结果。
block.device = /dev/sdb1
volume.label = @
volume.is_mounted = 1
volume.mount_point = /media/@
volume.size = 4009722368
感谢您的帮助!
mount
?如果mount
无法工作,为什么您的解决方案会有效呢? - Colonel Panic