Domanda

Ho scritto alcuni semplici filesystem con Python-fuse, ma ora voglio fare qualcosa che non riesco a trovare nel pydoc né negli script di esempio che ho trovato: quando il filesystem è smontato con fusermount -u, Voglio intercettare quell'azione, eseguire l'umount e quindi rmdir la directory di montaggio creata dallo script di inizializzazione del mio programma.Se è anche possibile, qual è l'incantesimo magico per intrappolare l'azione umount?

Posso vedere come questo possa facilmente trasformarsi in un ciclo infinito, ma spero di riuscire a capire come disabilitare l'umount trap la prima volta che viene colpito.


Aggiornamento: ho trovato destroy su http://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582 e ha aggiunto il metodo, ma non sembra essere chiamato.

È stato utile?

Soluzione

trovato!è fsdestroy () in Python-fuse.individuato da:

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

Quello che ho usato era:

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

Non so se il parametro data è necessario o meno, ma non fa male.E a quanto pare, si chiama dopo l'umount, quindi non dovevo preoccuparmi di gestirlo.

Altri suggerimenti

Un'altra soluzione, sebbene non specifica e non testata in Python, è impedire a FUSE di "demonizzare" con l'opzione -f.

In questo caso, il metodo fuse_main si bloccherà fino a quando il filesystem non verrà smontato e in seguito riavrai il controllo.

Se hai bisogno del comportamento del demone, puoi reimplementarlo da solo prima di montare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top