EDIT 1is_tarfile() возвращает истину пустой файл
Хм, я принимаю ответы, что деготь уважает пустой файл ... но в моей системе:
$ touch emptytar
$ tar -tf emptytar
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
Может быть, я неканоническая версия?
$ 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.
Привет всем,
Я проверяю некоторую логику для обработки пользователя при загрузке файла TAR. Когда я кормлю пустой файл tarfile.is_tarfile()
возвращает True
, который не то, что я ожидал:
$ touch tartest
$ cat tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
True
Если добавить текст в файл, он возвращает False
, который я ожидал:
$ echo "not a tar" > tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
False
я мог бы добавить проверку в начале, чтобы проверить файл нулевой длины, но на основе documentation для tarfile.is_tarfile(name)
Я думаю, что это ненужным:
Вернуть True, если имя является tar-архивом , файл, который может использовать файл tarfile .
я зашел так далеко, чтобы проверить источник, tarfile.py, и я могу видеть, что он проверяет блоки заголовков, но я не совсем понимаю, как это оценивает эти блоки.
Я неправильно истолковал документацию и, следовательно, установил несправедливые ожидания?
Спасибо,
Закари
«tar» Я пытался с GNU 1.15.1 (портировано Apple MacOSX/Darwin); Я затрудняюсь объяснить ваше наблюдение, что 1.22, похоже, изменилось несовместимым образом назад! –
Я могу подтвердить поведение ошибки GNU tar 1.26 в пустом файле: он выдает ошибку, тогда как tarfile.is_tarfile возвращает True – m13r