Tengo problemas al usar os.utime
para establecer correctamente el tiempo de modificación en el mac (Mac OS X 10.6.2, ejecutando Python 2.6.1 desde /usr/bin/python
). No es coherente con la utilidad touch
, y no es coherente con las propiedades que se muestran en la ventana "obtener información" del Finder.Inconsistencia en el tiempo modificado/creado/accedido en mac
Considere la siguiente secuencia de comandos. Los tiempos 'creado' y 'modificado' en el texto plano se refieren a los atributos que se muestran en la ventana "obtener información" en el buscador. Como recordatorio, os.utime toma argumentos (filename, (atime, mtime))
.
>>> import os
>>> open('tempfile','w').close()
'created' y 'modified' son ambas la hora actual.
>>> os.utime('tempfile', (1000000000, 1500000000))
'creado' es la hora actual, 'modificado' se 13 de julio de 2017.
>>> os.utime('tempfile', (1000000000, 1000000000))
'creados' y 'modificada' son ambos 8 de septiembre de 2001.
>>> os.path.getmtime('tempfile')
1000000000.0
>>> os.path.getctime('tempfile')
1269021939.0
>>> os.path.getatime('tempfile')
1269021951.0
... pero os.path.get?time
y os.stat
no lo reflejan.
>>> os.utime('tempfile', (1500000000, 1000000000))
'creados' y 'modificada' son todavía tanto 8 de septiembre de 2001.
>>> os.utime('tempfile', (1500000000, 1500000000))
'creado' es 8 de septiembre de 2001, 'modificado' es 13 de julio de 2017.
No estoy seguro de si se trata de un problema de Python o de una estadística de Mac. Cuando salgo de la terminal de Python y correr
touch -a -t 200011221234 tempfile
ni la modificación ni la creación tiempos cambian, como se esperaba. Luego ejecuto
touch -m -t 200011221234 tempfile
y se modifican los tiempos tanto 'creados' como 'modificados'.
¿Alguien tiene alguna idea de lo que está pasando? ¿Cómo cambio los tiempos de modificación y creación consistentemente en el mac? (Sí, soy consciente de que en los sistemas Unixy no hay "tiempo de creación.")
resultado de ejecutar el guión de Chris Johnsen:
[email protected]:~$ /usr/bin/python timetest.py tempfile 5
initial:
(1269631281.0, 1269631281.0, 1269631281.0, 1269631281, 1269631281, 1269631281)
test: (1000000000, 1000000000)
(1000000000.0, 1000000000.0, 1269631281.0, 1000000000, 1000000000, 1269631281)
(1269631281.0, 1000000000.0, 1269631281.0, 1269631281, 1000000000, 1269631281)
test: (1000000000, 1500000000)
(1000000000.0, 1500000000.0, 1269631286.0, 1000000000, 1500000000, 1269631286)
(1269631286.0, 1500000000.0, 1269631286.0, 1269631286, 1500000000, 1269631286)
test: (1500000000, 1000000000)
(1500000000.0, 1000000000.0, 1269631291.0, 1500000000, 1000000000, 1269631291)
(1269631291.0, 1000000000.0, 1269631291.0, 1269631291, 1000000000, 1269631291)
test: (1500000000, 1500000000)
(1500000000.0, 1500000000.0, 1269631296.0, 1500000000, 1500000000, 1269631296)
(1269631296.0, 1500000000.0, 1269631296.0, 1269631296, 1500000000, 1269631296)
Al final del ejercicio, el 'creado 'La fecha como visible en el buscador es el 9/8/01 y la fecha' modificada 'es el 7/13/17. (La fecha de acceso, gracias probablemente a los reflectores que sugieres y a la que he leído, es aproximadamente "ahora"). Las fechas creadas y modificadas visibles en el buscador aún no tienen sentido.
En una secuencia de comandos de copia de seguridad de python que escribí en osx, noté que solo puedo confiar en que el mtime sea coherente también. – snies
ctime no es "hora creada", es "hora de cambio de inodo" (consulte la página de manual de stat (2)). Un "tiempo de creación" se almacena en Mac OS X, pero no lo utilizan generalmente los programas POSIX, ya que no es portátil. –
@Chris: Lo sé. Cuando digo tiempo "creado", me refiero al tiempo "creado" según lo informado por el Buscador. –