pido disculpas si la pregunta es tan estúpida, pero estoy de nuevo en Linux y Python. El punto es que tengo que escribir una secuencia de comandos python que detectará la memoria USB conectada y le escribirá un archivo. Uso opensuse (pero script shoild trabajo con cualquier distribución de Linux. En el caso ideal). La versión actual puede detectar usb y escribir un archivo si ese usb está montado. Pero en mi máquina el usb está montado solo si lo busco en el administrador de archivos. Hasta ese usb detectado como una partición pero sin punto de montaje. Entonces, ¿cómo puedo forzar al sistema para que monte usb o cómo puedo escribir un archivo usando devname o devpath u otra información que puedo obtener del administrador de hal? No puedo usar "montaje" de comandos, ya que requiere un permiso de raízarchivo de escritura en USB con el pitón en Linux
El código fuente simplificado:
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()
La salida cuando USB enchufado
DeviceAdded
block.device = /dev/sdb1
volume.label = @
volume.is_mounted = 0
volume.mount_point =
volume.size = 4009722368
La salida cuando USB conectado y montado
block.device = /dev/sdb1
volume.label = @
volume.is_mounted = 1
volume.mount_point = /media/@
volume.size = 4009722368
¡Gracias por la ayuda!
Por qué no puedes usar 'mount'? Si 'mount' no funciona, ¿por qué sería su solución? –
Cuando uso mount tengo un mensaje "mount: only root puede hacer eso" – user1485818