سؤال

لقد كتبت بعض أنظمة الملفات البسيطة باستخدام Python-fuse، لكنني الآن أرغب في القيام بشيء لا يمكنني العثور عليه في pydoc ولا في نماذج البرامج النصية التي وجدتها:عندما يتم إلغاء تحميل نظام الملفات مع fusermount -u, ، أريد اعتراض هذا الإجراء، وتنفيذ umount، ثم rmdir دليل التحميل الذي تم إنشاؤه بواسطة البرنامج النصي لتهيئة البرنامج.إذا كان ذلك ممكنًا، فما هي التعويذة السحرية لاحتجاز الفعل المتجاوز؟

أستطيع أن أرى كيف يمكن أن يتحول ذلك بسهولة إلى حلقة لا نهاية لها، ولكنني آمل أن أعرف كيفية تعطيل مصيدة umount في المرة الأولى التي يتم فيها الضغط عليها.


تحديث:وجدت destroy في http://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582 وأضفت الطريقة ولكن لا يبدو أنها تسمى.

هل كانت مفيدة؟

المحلول

وجدت ذلك!إنه fsdestroy () في Python-fuse.تم تحديد موقعه بواسطة:

jcomeau@intrepid:/usr/src/google-desktop/api$ cat /usr/lib/python2.6/dist-packages/fuseparts/* | strings | grep destroy
fsdestroy

ما استخدمته هو:

def fsdestroy(self, data = None):
  syslog.syslog(syslog.LOG_INFO, 'destroy %s: %s' % (self.mountpoint, data))
  os.rmdir(self.mountpoint)

لا أعرف ما إذا كانت معلمة البيانات ضرورية أم لا، لكنها لا تؤذي.والظاهر أنه يسمى بعد المبلغ، لذلك لم يكن لدي ما يدعو للقلق بشأن التعامل مع ذلك.

نصائح أخرى

هناك حل آخر، على الرغم من أنه غير محدد ولم يتم اختباره ضمن Python، وهو منع FUSE من "الشيطنة" مع -f يُحوّل.

في هذه الحالة، fuse_main سيتم حظر الطريقة حتى يتم إلغاء تحميل نظام الملفات، وستستعيد التحكم بعد ذلك.

إذا كنت بحاجة إلى سلوك الشيطان، فيمكنك إعادة تنفيذه بنفسك قبل التثبيت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top