Python 2.5.1 broken os.stat module
Joe Salmeri
JoeSalmeri at hotmail.com
Fri Jun 1 07:55:50 EDT 2007
""Martin v. Löwis"" <martin at v.loewis.de> wrote in message
news:465fa702$0$2944$9b622d9e at news.freenet.de...
>> I created a file and specifically set the created date, last accessed
>> date
>> and last write date to
>>
>> 01/02/2003 12:34:56
>
> How did you do that?
I used a "touch" utility to set the dates but let's try it a different way.
Let's use Python 2.5.1 to set the timestamps
---->> set file timestamp
import pywintypes
import win32file
import sys
file_name = sys.argv[1]
new_timestamp = pywintypes.Time([2003, 1, 2, 12, 34, 56])
f = win32file.CreateFile(file_name, win32file.GENERIC_WRITE, 0, None,
win32file.OPEN_EXISTING, 0, 0)
win32file.SetFileTime(f, new_timestamp, new_timestamp, new_timestamp)
f.Close()
Next I created an empty file with notepad.
Then I used the above code to set the 3 timestamps.
Let's confirm that Windows has the timestamps set to what we set them too.
Here are the timestamps as reported by Windows:
dir /tc joe.txt
01/02/2003 12:34 PM 0 joe.txt
dir /ta joe.txt
01/02/2003 12:34 PM 0 joe.txt
dir /tw joe.txt
01/02/2003 12:34 PM 0 joe.txt
Looks like the python code worked to correctly set the timestamps
(Note you can also verify them using properties on the file in Windows
Explorer)
Here is some python code to print out the timestamps:
import os
import stat
import sys
import time
file_name = sys.argv[1]
file_stats = os.stat(file_name)
print 'Creation Time: %s' % time.strftime('%m/%d/%Y %H:%M:%S',
time.localtime(file_stats[stat.ST_CTIME]))
print 'Last Access Time: %s' % time.strftime('%m/%d/%Y %H:%M:%S',
time.localtime(file_stats[stat.ST_ATIME]))
print 'Last Write Time: %s' % time.strftime('%m/%d/%Y %H:%M:%S',
time.localtime(file_stats[stat.ST_MTIME]))
Now let's see what Python 2.4.2 says about the file
Creation Time: 01/02/2003 12:34:56
Last Access Time: 01/02/2003 12:34:56
Last Write Time: 01/02/2003 12:34:56
Looks like Python 2.4.2 is reporting the timestamps correctly
Now let's see what Python 2.5.1 says
Creation Time: 01/02/2003 11:34:56
Last Access Time: 01/02/2003 11:34:56
Last Write Time: 01/02/2003 11:34:56
All times are off by 1 hour!
Let's re-verify that Windows still says the timestamps are 01/02/2003
12:34:56.
dir /tc joe.txt
01/02/2003 12:34 PM 0 joe.txt
dir /ta joe.txt
01/02/2003 12:34 PM 0 joe.txt
dir /tw joe.txt
01/02/2003 12:34 PM 0 joe.txt
Windows still says the times are what we set them too.
Opening up Windows Explorer also confirms that the times are still
01/02/2003 12:34:56.
My text editor has a was to display the file names and timestamp info just
like a dir command
Let's see what it says:
h: joe .txt 0 1/02/03 12:34 \
The text editor is reporting the correct timestamps too.
So far everything else I try seems to report the timestamps correctly except
for Python 2.5.1.
It is difficult for me to believe that EVERYTHING else is wrong and Python
2.5.1 is correct, especially when you consider the fact that the code in
Python 2.5.1 that performs this functionality is not the same code that was
used in previous Python versions.
Normally if something is not working, the biggest suspect is the last thing
changed.
In my other msg I posted a program that compares the timestamps of a dir
/tc, dir /ta, and dir /tw for all files against what Python is reporting.
This allows us to easily verify what Windows says the timestamps are versus
what Python says they are.
Python 2.4.2 ALWAYS got it correct.
Python 2.5.1 gets it wrong as much as 50% of the time.
So unless you are saying that Windows is wrong, Python 2.5.1 has to be wrong
since it does not compare to what Windows reports. Since everything else I
have tried matches what Windows reports that leads me to believe that Python
2.5.1 has to be wrong.
>> I even found situations where the python timestamp was 1 minute later.
>> (I
>> know about the 2 second timestamps on FAT, all my filesystems are NTFS).
>> I
>> just found a situation where the python timestamp was 02:51 PM and the
>> windows timestamp was 02:12 PM. DST or timezone changes are not going
>> to
>> make the results be off by 39 minutes? (My timezone is GMT - 5:00).
>
> Right. If that is reproducable, it is a bug. Please create a zip file
> containing this file, and submit a bug report to sf.net/projects/python.
Please see my other msg, I ran the program in that msg against the
Python\lib directory: I tried it on multiple machines and found the same
problems occurring. I already submitted a bug report with the sample code
that demonstrates the problem.
All Python 2.4.2 timestamps match what Windows reports
The Python 2.5.1 timestamps vary
Sometimes python is +1 minute
Sometimes python is -1 hour
Sometimes python is +59 minutes
Sometimes python is +42 minutes
Sometimes python is +37 minutes
Sometimes python +2 minutes
Sometimes python +30 minutes
Sometimes python +3 minutes
Sometimes python +33 minutes
There is no way a timezone difference could explain those variations.
Bottom line is that Python should be reporting what Windows reports.
Even if it turns out that Windows has a bug and is wrong I still think that
Python should be reporting the same thing because what Windows reports is
what is expected. If Python reports something different (even if it was
correct) the information is not useful if it differs from what everything
else is reporting.
I hope I have provided enough information for you to reproduce the bug so
that a solution can be found.
Thanks for your time investigating this.
More information about the Python-list
mailing list