Accesso alle condivisioni Samba con Gio in pitone
-
22-09-2019 - |
Domanda
Sto cercando di fare un semplice client a riga di comando per l'accesso azioni tramite i binding Python di gio (sì, il requisito principale è quello di utilizzare gio).
Posso vedere che il confronto con il suo predecessore gnome-vfs, fornisce alcuni mezzi per fare cose di autenticazione (sottoclassi MountOperation
), e anche alcuni metodi che sono abbastanza specifici per azioni di samba, come set_domain()
.
Ma io sono bloccato con questo codice:
import gio
fh = gio.File("smb://server_name/")
Se il server richiede l'autenticazione, suppongo che è necessaria una chiamata a fh.mount_enclosing_volume()
, in quanto questo metodo prende un MountOperation
come parametro. Il problema è che la chiamata a questo metodo non fa nulla, e il fh.enumerate_children()
logica (per elencare le azioni disponibili), che viene dopo fallisce.
Qualcuno potrebbe fornire un esempio funzionante di come questo possa essere fatto con Gio?
Soluzione
sembra essere il codice minimo necessario il testo seguente montare un volume:
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)
(Derivato da gvfs-mount . )
Inoltre, potrebbe essere necessario un glib.MainLoop esecuzione perché GIO montare funzioni sono asincrone. Vedere il codice sorgente gvfs-mount per i dettagli.