PDA

Pogčedajte punu verziju : Python fs monitor - watchdog


cvele
08. 11. 2011., 07:47
Nasao sam python paket koji radi monitoring fajl sistema. Ono sto mi je trebalo jeste da znam kada je u odredjenom folderu napravljen neki fajl/folder (sadrzaj) kako bih izvrsio odredjene radnje nad njim.

Glavni problem mi je kako da znam da je kreiranje/kopiranje tog novog sadrzaja zavrseno.
To sam "ruzno" resio na sledeci nacin:


dir_size = int(self.get_dir_size(Event.src_path))
old_dir_size = 0

while old_dir_size != dir_size:
old_dir_size = dir_size
time.sleep(5)
dir_size = int(self.get_dir_size(Event.src_path))


Gde na svakih 5 sec citam velicinu foldera i ukoliko nije bilo promena smatram da je kopiranje zavrseno.

Ovo bi me u vecini slucajeva pokrilo, ali problem nastaje u situaciji gde se u taj folder downloaduje nesto preko torenta/"download akceleratora" i korisnik pauzira/stopira download kako bi ga nastavio kasnije.

Da li neko ima ideju kako ovo "pametnije" da resim ? OS na kome se izvrsava je windows.

Takodje kao kvisko pitanje, koji je najpametniji nacin za spawnovanje deamon u windowsu?

Edit:
Paket je:http://packages.python.org/watchdog/

djipko
08. 11. 2011., 14:13
Meni se cini da ovo sto hoces nije nikako lak problem, i bojim se da fajl sistem nema nacina ovo da ti ponudi.

Sada napamet pricam - jedan nacin bi mozda bio da pogledas koji fajlovi su jos uvek otvoreni i od strane kojih procesa i sta oni rade sa njima (da li imaju otvorene sockete, pa da pratis neke standardne protokole itd.) pa da na osnovu toga doneses neki zakljucak - koji verovatno nece biti 100% tacan (u slucaju torrent-a ni to nije bulletproof).

*nix i posix sistemi imaju naravno vrlo jasne nacine kako ovo da uradis (man proc, netstat etc.). Za win32 api ima nesto ovako mozda:

http://stackoverflow.com/questions/183925/what-win32-api-can-be-used-to-find-the-process-that-has-a-given-file-open

Kolko vidim watchdog ne nudi tako nesto - tj rekao bih da je malo visi nivo apstrakcije.

Takodje jos jedan zanimljiv post na SO koji moze biti od pomoci:

http://stackoverflow.com/questions/589407/python-how-to-check-if-a-file-is-used-by-another-application

Za kraj, ako upses da resis na neki nacin molim te napisi ovde - mene vrlo zanima.

cvele
08. 11. 2011., 15:11
Palo mi je napamet resenje koje bi me spasilo u mom specificnom slucaju, ali nije univerzalno.
Posto se radi o zapakovanim arhivama, rar zip itd. Proveravam validnost arhive (crc) i radim uncompress samo ako je proslo ok.

misk0
09. 11. 2011., 23:13
Zar ne bi fajlovi koji se 'pishu' trebali biti lock-ovani na neki nacin? Mozes li to da provjeris?