Seite 1 von 1
os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 24. März 2011, 12:58
von joh#
Hallo,
ich prüfe unter Python 2.6 (linux 2.6.32-30-generic) mit:
Code: Alles auswählen
if os.stat(datei1).st_mtime > os.stat(datei2).st_mtime:
ob datei 1 jüngeren Datums ist (also z.B. datei 2 übeschreiben darf)
Obwohl beide Dateien lt. ls -l den gleichen Zeitstempel besitzen, liefert
obiges True. Unter Python 2.4 ist so was als bug bekannt. Ist das für 2.6
ebenso?
Gruß
joh
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 24. März 2011, 13:14
von BlackJack
@joh#: ``ls -l`` zeigt in der Regel nicht die volle Auflösung des Zeitstempels. Wie sehen denn die `st_mtime`-Attribute aus?
Und das kann auch problematisch werden, wenn die Dateien auf verschiedenen Dateisystemen mit einer Unterschiedlichen Auflösung der Zeitstempel-Informationen liegen. Da kann aber Python nichts dafür.
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 24. März 2011, 19:12
von ms4py
Falls es wirklich an der Auflösung liegt, arbeitest du einfach mit einem Threshold zum Vergleichen.
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Freitag 25. März 2011, 09:40
von joh#
BlackJack hat geschrieben:@joh#: ``ls -l`` zeigt in der Regel nicht die volle Auflösung des Zeitstempels. Wie sehen denn die `st_mtime`-Attribute aus?
sorry, bin grade etwas begriffsstutzig, was für Attribute denn?.
os.stat wird lt (z.B.):
http://stackoverflow.com/questions/8376 ... -directory doch einfach so benutzt:
oder so?
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Freitag 25. März 2011, 09:41
von joh#
ms4py hat geschrieben:Falls es wirklich an der Auflösung liegt, arbeitest du einfach mit einem Threshold zum Vergleichen.
Hast Du vielleicht noch 2 Zeilen code dazu übrig?
Gruß
joh
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Freitag 25. März 2011, 10:36
von BlackJack
@joh#: Ich wollte wissen an was für Werte die `st_time`-Attribute in dem konkreten Fall gebunden sind. Lass Dir die Zahlen doch mal ausgeben, die Du da vergleichst.
Threshold: Die beiden Zeiten voneinander abziehen und nur kopieren wenn das Ergebnis einen bestimmten Wert überschreitet. Oder unterschreitet -- je nach dem in welcher Reihenfolge Du die Subtraktion machst.
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Freitag 25. März 2011, 17:08
von ms4py
BlackJack hat geschrieben:Threshold: Die beiden Zeiten voneinander abziehen und nur kopieren wenn das Ergebnis einen bestimmten Wert überschreitet. Oder unterschreitet -- je nach dem in welcher Reihenfolge Du die Subtraktion machst.
Ein `abs` wäre wohl eher angebracht, weil man nie weiß, welche Zahl größer oder kleiner ist.
Code: Alles auswählen
THRESHOLD = 0.001
if abs(val1 - val2) > THRESHOLD:
do_copy()
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 31. März 2011, 08:55
von joh#
BlackJack hat geschrieben:@joh#: Ich wollte wissen an was für Werte die `st_time`-Attribute in dem konkreten Fall gebunden sind. Lass Dir die Zahlen doch mal ausgeben, die Du da vergleichst.
Threshold: Die beiden Zeiten voneinander abziehen und nur kopieren wenn das Ergebnis einen bestimmten Wert überschreitet. Oder unterschreitet -- je nach dem in welcher Reihenfolge Du die Subtraktion machst.
Das mit dem Schwellwert (hier vielleicht 5.0) scheint schon sinnvoll, da ich ziemlich eng beieinander liegende Werte erhalte:
- 1301041314.46
1301041314.0
1301345740.15
130134574
1301491812.0
1301491810.08
1301487152.0
1301487151.0
1301486980.0
1301486979.59
(jeweils für datei1/datei2)
Masseinheit scheit Sekunde zu sein, obwohl die Bearbeitungszeiten viel weiter auseinander liegen müssten.
Das Ganze soll dazu dienen, zwischen einem linux und einem winXP-PC Dateien über einen Stick (vfat32)
hin und her zu kopieren. Vielleicht liegt's ja an den Filesystemen.
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 31. März 2011, 08:57
von joh#
[quote="ms4py"]Ein `abs` wäre wohl eher angebracht, weil man nie weiß, welche Zahl größer oder kleiner ist.
Code: Alles auswählen
THRESHOLD = 0.001
if abs(val1 - val2) > THRESHOLD:
do_copy()
Wenn die falsche größer ist, ist das in meinem Fall ein Grund zu meckern,
damit nicht neues mit altem überschrieben wird
Re: os.stat 2.4 bug auch in 2.6?
Verfasst: Donnerstag 31. März 2011, 09:14
von BlackJack
@joh#: Um zu wissen ob die "falsche" Zeitangabe grösser/kleiner ist, müsstest Du dann aber doch Wissen über die Auflösung der Zeitstempel der beiden Dateien haben. Und die variiert relativ stark. FAT32 hat nur eine 2s Auflösung, Unix "traditionell" eine 1s Auflösung, aber ext4 zum Beispiel eine Nanosekunde.