الوصول إلى أسهم Samba مع Gio في Python
-
22-09-2019 - |
سؤال
أحاول إنشاء عميل سطر أوامر بسيط للوصول إلى الأسهم عبر روابط Python لـ GIO (نعم ، المطلب الرئيسي هو استخدام 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.)
بالإضافة إلى ذلك ، قد تحتاج إلى تشغيل glib.mainloop لأن وظائف تركيب GIO غير متزامنة. راجع رمز مصدر GVFS-Mount للحصول على التفاصيل.