I need to write a daemon for Solaris that monitors a directory for incoming FTP transfers. Under certain conditions, when the transfer is complete I need to send an email notification, and do other stuff. Win32 provides FindFirstChangeNotification(), but as best I can tell this isn't supported on Solaris.
I am thinking of using the approach suggested here http://tgolden.sc.sabren.com/python/win32_how_do_i/watch_directory_for_changes.html which is: import os, time path_to_watch = "." before = dict ([(f, None) for f in os.listdir (path_to_watch)]) while 1: time.sleep (10) after = dict ([(f, None) for f in os.listdir (path_to_watch)]) added = [f for f in after if not f in before] removed = [f for f in before if not f in after] if added: print "Added: ", ", ".join (added) if removed: print "Removed: ", ", ".join (removed) before = after My concern with this is that a change may be detected before the ftp daemon process is done writing the file to disk. I don't want to take any action until the file is written and closed. I know that I could pole a new file looping to check to see if it's file size is changing but the timing of such a loop is subject to I/O buffering and is otherwise not elegant. Googling shows other solutions using fcntl (http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/217829) but it appears that this only works on Linux. While I'm at it I'm going to throw in a grump about the Python documentation of fcntl. The doco indicates to read the source for fcntl.py to lookup the constants representing the different types of events/signals that are avaiable. However fcntl on some platforms seems to be implemented as a binary leaving no way to look up the contants for the platform. Suggestions? -- http://mail.python.org/mailman/listinfo/python-list