unexpected read error python tar eof

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 .