我正在尝试制作一个简单的命令行客户端,以通过GIO的Python绑定访问共享(是的,主要要求是使用GIO)。

我可以看到,与它的前身GNOME-VF进行比较,它提供了一些进行认证的方法(子类别 MountOperation),甚至是一些针对桑巴股票的方法,例如 set_domain().

但是我坚持此代码:

import gio

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

如果该服务器需要身份验证,我想 fh.mount_enclosing_volume() 需要,因为这种方法采用 MountOperation 作为参数。问题在于,调用此方法无济于事,逻辑 fh.enumerate_children() (列出可用的股票)接下来会失败。

有人可以提供一个工作的示例,说明GIO将如何做到这一点?

有帮助吗?

解决方案

以下似乎是安装卷所需的最小代码:

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安装.)

此外,您可能需要一个glib.mainloop运行,因为Gio安装函数是异步的。有关详细信息,请参见GVFS安装源代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top