2011-04-30 85 views
3

我已經用Python保險絲寫了一些簡單的文件系統,但現在我想做一些我在pydoc中找不到的東西,也沒有在我找到的示例腳本中找到:當文件系統卸載了fusermount -u,我想要捕獲該操作,執行umount,然後rmdir通過我的程序的初始化腳本創建的掛載目錄。如果這甚至是可能的,那麼陷入下一步行動的魔法咒語是什麼?umount上的保險絲動作

我可以看到這很容易變成一個無限循環,但我希望能夠弄清楚如何在第一次命中時禁用umount陷阱。


更新:我發現 destroyhttp://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582並添加了該方法,但它似乎並未被調用。

回答

0

找到了!它是Python中的fsdestroy()。位於它由:

 
[email protected]:/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) 

不知道數據參數是必要的或沒有,但不痛。顯然,它在之後被稱爲,所以我不必擔心處理該問題。

+0

不適合我。如果我重寫這個方法,當調用'fusermount -u'時,方法的內容永遠不會運行('os.rmdir'沒有任何效果,即使它們在其他方法中工作,打印也不會輸出任何內容) ,腳本掛起。我必須用'kill -KILL'手動殺死它。我有'fuse.fuse_python_api =(0,2)' – 2012-05-17 21:25:39

+0

什麼都沒有在系統日誌? – 2012-05-23 00:47:40

0

另一種解決方案雖然不具體,並且未在Python下進行測試,但可防止FUSE通過-f交換機進行「守護進程」。

在這種情況下,fuse_main方法會阻塞,直到文件系統處於未掛載狀態,並且您將在之後獲得控制權。

如果您確實需要deamon行爲,您可以在安裝之前自行重新實現。