使用gio在Python中访问Samba共享
我正在尝试用Python的gio库制作一个简单的命令行客户端,以便访问共享文件(是的,主要要求就是使用gio)。
我发现与它的前身gnome-vfs相比,gio提供了一些认证的功能(通过继承MountOperation
),甚至还有一些特定于samba共享的方法,比如set_domain()
。
但是我在这段代码上遇到了问题:
import gio
fh = gio.File("smb://server_name/")
如果那个服务器需要认证,我想应该调用fh.mount_enclosing_volume()
,因为这个方法需要一个MountOperation
作为参数。问题是,调用这个方法没有任何反应,接下来逻辑上应该调用的fh.enumerate_children()
(用来列出可用的共享)也失败了。
有没有人能提供一个使用gio的有效示例呢?
1 个回答
6
下面的代码是挂载一个存储卷所需的最基本代码:
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)
(这个代码是从gvfs-mount中提取的。)
另外,你可能还需要一个运行中的glib.MainLoop,因为GIO的挂载功能是异步的。想了解更多细节,可以查看gvfs-mount的源代码。