2010-01-02 11 views
2

J'essaye de faire un simple client en ligne de commande pour accéder aux partages via les bindings Python de gio (oui, l'exigence principale est d'utiliser gio).Accéder aux partages samba avec gio en python

Je peux voir que la comparaison avec son prédécesseur gnome-vfs, il fournit des moyens de faire des choses d'authentification (MountOperation sous-classement), 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'un appel à fh.mount_enclosing_volume() est nécessaire, car ces méthodes prend un MountOperation comme paramètre. Le problème est que l'appel de cette méthode ne fait rien, et le fh.enumerate_children() logique (pour lister les partages disponibles) qui vient ensuite échoue.

Quelqu'un pourrait-il fournir un exemple pratique de la façon dont cela serait fait avec gio?

Répondre

4

Voici ce qui apparaît être le code minimum nécessaire pour monter un volume: (. Dérivé de gvfs-mount)

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) 

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