Question

Je suis en train de faire un simple client de ligne de commande pour accéder aux partages via les liaisons Python de gio (oui, l'exigence principale est d'utiliser gio).

Je peux voir que la comparaison avec son prédécesseur gnome-vfs, il fournit des moyens de faire des choses d'authentification (subclassing de MountOperation), et même des méthodes qui sont très spécifiques aux actions de samba, comme set_domain().

Mais je suis coincé avec ce code:

import gio

fh = gio.File("smb://server_name/")

Si ce serveur nécessite une authentification, je suppose qu'il faut un appel à fh.mount_enclosing_volume(), comme ces méthodes prend un MountOperation comme paramètre. Le problème est que l'appel ces méthodes ne fait rien, et la fh.enumerate_children() logique (à la liste des actions disponibles) qui vient échoue à côté.

Tout le monde pourrait fournir un exemple de travail de la façon dont cela se fait avec gio?

Était-ce utile?

La solution

Ce qui suit semble être le code minimum nécessaire pour monter 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)

(dérivé de gvfs monture . )

En outre, vous devrez peut-être un glib.MainLoop en cours d'exécution parce que GIO montage fonctions sont asynchrones. Voir le code source gvfs montage pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top