Ich brauche ein temporäres Verzeichnis, aber ich möchte vollständige Kontrolle über seine Erstellung und Löschung haben.
Ich werde dieses Verzeichnis verwenden, um Git-Repositories zu platzieren, die ich auf neue Commits überwachen möchte, also muss ich sie irgendwo dauerhaft speichern.
Daher möchte ich /tmp
dir vermeiden, da es vom Benutzer gelöscht werden kann (?). Was ist die beste Vorgehensweise dafür?
Ссылка ist ein Python-Modul, das eine plattformübergreifende Funktion user_cache_dir
anbietet.
tempfile.mkdtemp
erstellt ein temporäres Verzeichnis für Sie und gibt dessen Namen zurück. Es wird standardmäßig in /tmp
(auf Unix-ähnlichen Systemen) erstellt, aber "auf die sicherste Art und Weise" und mit Lese- / Schreib- / Listenberechtigungen nur für die Benutzer-ID des Aufrufers.
(Btw., auf einem Unix / Linux-System mit Standardeinstellungen können die Benutzer nicht gegenseitig die Dateien von /tmp
bearbeiten oder entfernen.)
Ich würde sagen, dass die beste Methode darin besteht, tempfile.mkdtemp
zu verwenden.
Wenn Sie /tmp
nicht verwenden möchten, können Sie den Parameter prefix
nutzen:
Edit: Was ist das am besten geeignete Verzeichnis, um Ihre Anwendungskonfiguration, Cache-Daten usw. zu verwalten? Wenn Sie Linux verwenden, sehen Sie sich bitte die XDG Base Directory-Spezifikation .
Wenn es wirklich temporär ist, folgen Sie den Anweisungen von larmans und verwenden Sie mkdtemp
.
Wenn es sich um einen semi-permanenten Cache handelt, der Neustarts überleben muss, sollten Sie das lokale Anwendungsverzeichnis verwenden, wie es von Ihrem Betriebssystem definiert wurde (% APPDATA%, ~ / .local / etc); Einige Toolkits (z. B. Qt) stellen Funktionen bereit, um diesen Ordner plattformübergreifend anzuzeigen.
Bearbeiten: aus Wikipedia:
Sie sollten also nach os.environ['APPDATA']
oder os.environ['HOME']
suchen, abhängig von der Plattform (siehe sys.platform
) und dann Ihren App-Namen anhängen, und dann können Sie dort alles speichern, was Sie wollen.
Nur ein though: Vielleicht möchten Sie sich git Commit-Hooks anschauen. Anstatt ein tmp-Verzeichnis für neue Commits zu überwachen (hört sich merkwürdig an: Wer würde sich in ein tmp-Verzeichnis mit eingeschränkten Berechtigungen einschreiben?), Informiert der Repo Sie über Commits oder, genauer gesagt, führt automatisch ein Skript aus, wenn eine Commit stattfindet.