2011-04-30 45 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行为,您可以在安装之前自行重新实现。