Pergunta

Escrevi alguns sistemas de arquivos simples com Python-fuse, mas agora quero fazer algo que não consigo encontrar no pydoc nem nos scripts de amostra que encontrei: quando o sistema de arquivos é desmontado com fusermount -u, Desejo interceptar essa ação, executar o umount e, em seguida, rmdir o diretório de montagem criado pelo script de inicialização do meu programa.Se for possível, qual é o encantamento mágico para prender a ação umount?

Eu posso ver como isso pode facilmente se transformar em um loop infinito, mas posso descobrir como desativar a armadilha do umount na primeira vez que for atingida.


Atualização: encontrei destroy em http://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582 e adicionou o método, mas não parece ser chamado.

Foi útil?

Solução

encontrou!é fsdestroy () em Python-fuse.localizado por:

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

O que usei foi:

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

Não sei se o parâmetro de dados é necessário ou não, mas não faz mal.E, aparentemente, é chamado após o umount, então não precisei me preocupar em lidar com isso.

Outras dicas

Outra solução, embora não específica e não testada em Python, é impedir o FUSE de "daemonizar" com a opção -f.

Nesse caso, o método fuse_main irá bloquear até que o sistema de arquivos seja desmontado, e você receberá o controle de volta depois.

Se você precisa do comportamento deamon, pode reimplementá-lo antes de montar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top