python - tar: read error: unexpected eof
tar.extractall() no reconoce EOF inesperado (2)
Escribí un trabajo alrededor Funciona con mis archivos tar. Supongo que no admite todos los tipos de objetos que se pueden almacenar en un archivo tar.
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, unicode_literals, print_function
import os
import tarfile
class TarfileWhichRaisesOnEOF(tarfile.TarFile):
def extractall(self, path=".", members=None):
super(TarfileWhichRaisesOnEOF, self).extractall(path, members)
if members is None:
members = self
for tarinfo in members:
if not tarinfo.isfile():
continue
file=os.path.join(path, tarinfo.name)
size_real=os.path.getsize(file)
if size_real!=tarinfo.size:
raise tarfile.ExtractError(''Extracting %s: Size does not match. According to tarinfo %s and on disk %s'' % (
tarinfo, tarinfo.size, size_real))
La biblioteca de archivos tarfile
Python no detecta un tar roto.
user@host$ wc -c good.tar
143360 good.tar
user@host$ head -c 130000 good.tar > cut.tar
user@host$ tar -tf cut.tar
...
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
Muy bien, la herramienta de línea de comandos reconoce un EOF inesperado.
user@host$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import tarfile
>>> tar=tarfile.open(''cut.tar'')
>>> tar.extractall()
No está bien. La biblioteca de Python decodifica el archivo, pero no genera ninguna excepción.
¿Cómo detectar EOF inesperado con la biblioteca de Python? Quiero evitar el módulo de subprocess
.
El parámetro errorlevel
no ayuda. Intenté errorlevel = 1 y errorlevel = 2.
Esto se ha solucionado en Python 3: se OSError
un OSError
independientemente de la configuración de nivel de errorlevel
.