【发布时间】:2016-07-12 18:03:31
【问题描述】:
我希望使用tarfile 附加到 .tar 文件,但我不知道该文件是否正在使用中。如何检查文件是否可以附加到?
我试过了:
try:
with tarfile.open("foo.tar", "a:") as tar:
tar.add("bar.txt")
except tarfile.TarError:
print "error"
这有时会出现错误,但有时不会,并且最后的 tar 文件没有我期望的所有文件。
我的计划是循环使用它并不断尝试直到它起作用。
我还有其他选择,其中大部分涉及将去皮留给另一个流程,但我觉得 tarfile 应该对这类事情负责。我可以为tarfile 编写一个包装器,检查新文件是否出现在tar.getmembers() 列表中。
【问题讨论】:
-
一般情况下,即使可能正在使用任何文件,您也不应该写入任何文件。虽然附加模式对于简单文件(例如没有任何行超过缓冲区大小的日志)是安全的,但 tarfile 需要覆盖最后几个块。
-
@o11c 我不确定您所说的“tarfiles 需要覆盖最后几个块”是什么意思。
-
.tar文件由 512 字节记录的(不可搜索的)序列组成。档案的结尾由至少两个连续的零填充记录标记。为了追加,您必须消除零记录。