如果問題太蠢,但我是linux和python的新手,我表示歉意。 問題是我需要編寫一個python腳本來檢測連接的usb棒並向它寫入一個文件。我使用opensuse(但理想情況下腳本可以和任何linux發行版一起工作)。當前版本可以檢測USB並寫入一個文件,如果該USB被安裝。但是在我的機器上,只有當我在文件管理器中瀏覽它時,纔會安裝USB。在此之前,USB檢測爲部分,但沒有安裝點。那麼,我該如何強制系統掛載usb,或者如何使用devname或devpath寫入文件,或者我可以從hal manager獲得的信息。我不能使用「加載」命令,因爲它需要一個根權限在linux上使用python將文件寫入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 IN
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'不起作用,爲什麼你的解決方案? –
當我使用mount時,我有一個消息「mount:只有root可以做到這一點」 – user1485818