En Wed, 07 Mar 2007 02:28:33 -0300, Ros <[EMAIL PROTECTED]> escribió:
> There are 10 files in the folder. I wish to process all the files one > by one. But if the files are open or some processing is going on them > then I do not want to disturb that process. In that case I would > ignore processing that particular file and move to next file. > > How can I check whether the file is open or not? > > I tried os.stat and os.access but I am not getting the expected > results. > Also I checked in IO exceptions, IO error handler doesnt raise any > error if the file is open. > There are some options to check but they are platform dependent (works > only with unix) This works only on Windows: You can use the _sopen function (from the C runtime library), which takes additional flags for specifying file sharing. See http://msdn2.microsoft.com/en-us/library/aa273350(VS.60).aspx _sopen with _SH_DENYRW will fail if the file is already open by the same or another process. Try to open the file using this flag: if _sopen succeeds (does not return -1) the file was not already open (remember to close it as soon as possible!); if _sopen fails (returns -1) it was already open. Using the ctypes module (included with Python 2.5; you can download and install it for previous versions) you can call that function easily: py> from ctypes import * py> crt = cdll.msvcrt py> _sopen = crt._sopen py> _sopen.argtypes = (c_char_p, c_int, c_int, c_int) py> _SH_DENYRW = 0x10 # from <share.h> py> h = _sopen("C:\\1.txt", 0, _SH_DENYRW, 0) py> h 3 py> h2 = _sopen("C:\\1.txt", 0, _SH_DENYRW, 0) py> h2 -1 py> _close = crt._close py> _close(h) 0 py> h2 = _sopen("C:\\1.txt", 0, _SH_DENYRW, 0) py> h2 3 py> _close(h2) 0 Note: You said "But if the files are open or some processing is going on them then I do not want to disturb that process.". There exist a (small) risk of disturbing the other process: if it tries to open the file just after you opened it, but before you close it, the operation will fail. It is a tiny window, but might happen... Surely there are other ways - some programs can report all processes having a certain file opened, by example, but I don't know how to do that. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list