El acceso a partes de la samba con Gio en Python
-
22-09-2019 - |
Pregunta
Estoy tratando de hacer un simple cliente de línea de comandos para acceder a acciones a través de los enlaces de Python de Gio (sí, el requisito principal es el uso gio).
Me puede ver que la comparación con su predecesor de GNOME-VFS, que proporciona algún medio para hacer cosas autenticación (MountOperation
de subclases), e incluso algunos métodos que son muy específicos para acciones de samba, como set_domain()
.
Pero estoy atascado con este código:
import gio
fh = gio.File("smb://server_name/")
Si ese servidor necesita autenticación, supongo que es necesaria una llamada a fh.mount_enclosing_volume()
, ya que estos métodos toma un MountOperation
como parámetro. El problema es que llamar a estos métodos no hace nada, y el fh.enumerate_children()
lógica (para enumerar las acciones disponibles) que viene a continuación falla.
Cualquiera podría proporcionar un ejemplo práctico de cómo esto se haría con Gio?
Solución
Los siguientes parece ser un código mínimo necesario para montar un volumen:
def mount(f):
op = gio.MountOperation()
op.connect('ask-password', ask_password_cb)
f.mount_enclosing_volume(op, mount_done_cb)
def ask_password_cb(op, message, default_user, default_domain, flags):
op.set_username(USERNAME)
op.set_domain(DOMAIN)
op.set_password(PASSWORD)
op.reply(gio.MOUNT_OPERATION_HANDLED)
def mount_done_cb(obj, res):
obj.mount_enclosing_volume_finish(res)
(Derivados de gvfs de montaje . )
Además, es posible que necesite un glib.MainLoop correr porque montaje GIO funciones son asíncronas. Ver las gvfs de montaje en código fuente para más detalles.