开发者

Accessing samba shares with gio in python

I am trying to make a simple command line client for accessing shares via the Python bindings of gio (yes, the main requirement is to use gio).

I can see that comparing with it's predecessor gnome-vfs, it provides some means to do authentication stuff (subclassing MountOperation), and even some methods which are quite specific to samba shares, like set_doma开发者_JS百科in().

But I'm stuck with this code:

import gio

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

If that server needs authentication, I suppose that a call to fh.mount_enclosing_volume() is needed, as this methods takes a MountOperation as a parameter. The problem is that calling this methods does nothing, and the logical fh.enumerate_children() (to list the available shares) that comes next fails.

Anybody could provide a working example of how this would be done with gio ?


The following appears to be the minimum code needed to mount a 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)

(Derived from gvfs-mount.)

In addition, you may need a glib.MainLoop running because GIO mount functions are asynchronous. See the gvfs-mount source code for details.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜