EDIT 1is_tarfile() Devuelve verdadero para un archivo en blanco
Hmm, acepto las respuestas que el alquitrán respeta un archivo vacío ... pero en mi sistema:
$ touch emptytar
$ tar -tf emptytar
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
Tal vez tengo una versión no canónica?
$ tar --version
tar (GNU tar) 1.22
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
Hola a todos,
estoy probando algo de lógica para manejar un usuario cargar un archivo TAR. Cuando doy de comer a un archivo en blanco a tarfile.is_tarfile()
vuelve True
, que no es lo que estoy esperando:
$ touch tartest
$ cat tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
True
Si añado un poco de texto en el archivo, devuelve False
, que estoy esperando:
$ echo "not a tar" > tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
False
que podría añadir un cheque al principio para comprobar si hay un archivo de longitud cero, pero en base a la documentation para tarfile.is_tarfile(name)
creo que esto es innecesario:
Devuelve True si el nombre es un archivo tar , que el módulo tarfile puede leer.
me fue tan lejos como para comprobar la fuente, tarfile.py, y puedo ver que se está comprobando bloques de cabecera, pero no entiendo cómo se ha puesto evaluando esos bloques.
¿Estoy malinterpretando la documentación y, por lo tanto, estableciendo expectativas injustas?
Gracias,
Zachary
El 'tar' con el que he intentado es GNU's 1.15.1 (como portado por Apple a MacOSX/Darwin); ¡No puedo explicar tu observación de que 1.22 parece haber cambiado de una manera incompatible hacia atrás! –
Puedo confirmar el comportamiento de error de GNU tar 1.26 en un archivo vacío: arroja un error, mientras que tarfile.is_tarfile devuelve True – m13r