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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top