Temporäres Verzeichnis bleibt bei Programmdurchläufen bestehen

7

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?

    
umpirsky 09.01.2012, 13:30
quelle

6 Antworten

1

Ссылка ist ein Python-Modul, das eine plattformübergreifende Funktion user_cache_dir anbietet.

    
Janne Karila 09.01.2012, 16:48
quelle
8

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.

%Vor%

(Btw., auf einem Unix / Linux-System mit Standardeinstellungen können die Benutzer nicht gegenseitig die Dateien von /tmp bearbeiten oder entfernen.)

    
Fred Foo 09.01.2012 13:32
quelle
8

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:

%Vor%

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 .

    
jcollado 09.01.2012 13:32
quelle
2

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:

  • HOME (Unix-ähnlich) und USERPROFILE (Microsoft Windows) - geben an, wo Das Ausgangsverzeichnis eines Benutzers befindet sich im Dateisystem.
  • HOME / {. AppName} (Unix-ähnlich) und APPDATA {DeveloperName \ AppName} (Microsoft Windows) - zum Speichern von Anwendungseinstellungen. Viele öffnen sich Quellprogramme verwenden USERPROFILE für Anwendungseinstellungen falsch in Windows - USERPROFILE sollte nur in Dialogen verwendet werden, die dies zulassen Der Benutzer kann zwischen den folgenden Wegen wählen: Dokumente / Bilder / Downloads / Musik, Verwenden Sie für programmatische Zwecke APPDATA (Roaming), LOCALAPPDATA oder PROGRAMDATA (von Benutzern geteilt)

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.

%Vor%     
Giacomo Lacava 09.01.2012 13:40
quelle
0

Normalerweise verwenden Programme ein ~/.progname -Verzeichnis, um Daten zu speichern, die persistent sein sollten, aber "aus dem Weg" des Benutzers bleiben sollten.

    
sth 09.01.2012 13:40
quelle
0

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.

    
a2800276 09.01.2012 13:52
quelle

Tags und Links