質問

私は、GIOのPythonバインディングを介してシェアにアクセスするためのシンプルなコマンドラインクライアントを作成しようとしています(はい、主な要件はGIOを使用することです)。

前身のgnome-vfsと比較すると、認証のものを行うための手段が提供されていることがわかります(サブクラス化 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-mount.)

さらに、Gio Mount機能は非同期であるため、Glib.mainloopが実行される必要がある場合があります。詳細については、GVFS-Mountソースコードを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top