Ich suche an eine .tar-Datei mit tarfile
anhängen, aber ich weiß nicht, ob die Datei verwendet wird oder nicht. Wie kann ich überprüfen, ob die Datei angehängt werden kann?Wie kann ich überprüfen, ob eine TAR-Datei mit dem Tarfile-Modul geschrieben werden kann?
Ich habe versucht:
try:
with tarfile.open("foo.tar", "a:") as tar:
tar.add("bar.txt")
except tarfile.TarError:
print "error"
und dies wird manchmal den Fehler, aber manchmal ist es nicht und die TAR-Datei am Ende haben nicht alle Dateien, die ich erwarten würde.
Mein Plan ist es, dies in einer Schleife zu haben und weiter zu versuchen, bis es funktioniert.
Ich habe andere Optionen, von denen die meisten die Tarierung zu einem anderen Prozess führen, aber ich denke, dass tarfile
für diese Art von Sache verantwortlich sein sollte. Ich könnte einen Wrapper für tarfile
schreiben, der die neue Datei auf der tar.getmembers()
Liste überprüft.
Im Allgemeinen sollten Sie nicht in eine Datei schreiben, wenn es überhaupt * möglich * ist, dass sie verwendet wird. Während der append-Modus für einfache Dateien wie Logs sicher ist, bei denen keine Zeile über der Puffergröße liegt, müssen Tarfiles die letzten Blöcke überschreiben. – o11c
@ o11c Ich bin mir nicht sicher, was Sie meinen, die "Tarfiles müssen die letzten paar Blöcke überschreiben". –
'.tar' Dateien bestehen aus einer (nicht suchbaren) Folge von 512-Byte-Datensätzen. Das Ende eines Archivs ist durch mindestens zwei aufeinanderfolgende Nullen gekennzeichnet. Um anhängen zu können, müssen Sie die zerotierten Datensätze eliminieren. – o11c