Guardare le modifiche / aggiunte / rimozione dei file, ma con un occhio al trasferimento parziale

1

Vorrei monitorare il filesystem in python, in modo che la mia applicazione venga avvisata della nuova aggiunta di file, della rimozione di file o del cambio di file. Una volta che il file viene rilevato, l'applicazione inizia ad estrarre i dati contenuti attraverso vari plugin. Il problema è che mi occupo di file di grandi dimensioni e quando l'utente inizia a copiare un file dall'esterno nella directory controllata, verrà rilevato, ma apparirà danneggiato. Controllare la dimensione del file tra le chiamate è potenzialmente una buona strategia, ma ignora il fatto che altri generatori del file (come wget) potrebbero avere lunghe pause quando il file non sta cambiando di dimensioni, e tuttavia non è stato completato. Non ho il controllo del formato di file che sto scaricando, quindi non posso controllare la presenza di un marchio di fine file, perché non potrebbe essere lì.

Esiste un modo multipiattaforma (o modi diversi, specifici per piattaforma per linux e windows) per risolvere questo problema? Posso controllare se un file è attualmente aperto in qualche modo? In che modo questo problema viene risolto con altri software?

    
posta Stefano Borini 07.06.2013 - 14:01
fonte

1 risposta

1

Dato che sai quale file è cambiato ma non con quale processo questo è difficile ma risolvibile. Puoi utilizzare psutil per gestirlo.

Con psutil puoi scorrere tutti i processi in esecuzione e chiedere loro i loro file aperti. Scritto come pseudo codice:

for process in psutil open processes:
    for file in process all open files:
        check if this your file:
            yes => remember pid
pid is set:
    yes => wait for the process to finish
do your work with the file

Questo è un modo semplice ma non molto efficace per gestire il tuo problema.

    
risposta data 26.11.2014 - 17:54
fonte

Leggi altre domande sui tag