2016-06-10 9 views
0

Also ich möchte mein Programm, wenn gepackt in eine .exe und lief auf jedem System (hauptsächlich Windows), die Python nicht installiert hat, eine versteckte temporäre Datei schreiben irgendwo im Dateisystem (vorzugsweise hoch oben in der Systemstruktur, die nicht für versehentliche Entfernung gefährdet ist) als eine Möglichkeit zu wissen, wann es zuerst ausgeführt wurde, wie ein Totem. ... und was ich mit "Totem" meine, ist wie dieser silberne Dreidel von Inception, von dem Leonardo DiCaprio wusste, in welchem ​​Zustand er war (REM oder Reality); aus Mangel an einem besseren Wort/Metapher.Python "Totem" Standorte (plattformunabhängige Pfade)

Zum Beispiel in Windows-Eingabeaufforderung können Sie PATH-Variablen verwenden, um Standardpfade für Dinge wie die Benutzer zu Hause Standort:

start cmd 
echo "%USERPROFILE% 

... und das würde zurückkehren so etwas wie „C:/Users/Chris“, und das wäre perfekt Ursache hätte ich:

a. Sufficient Read/Write privileges 
b. In a directory that won't be removed any time soon. 

Das nächste, was ich war zu verwenden gefunden:

import sys 
sys.path 

Aber das würde eine Liste von zufälligen Pfaden zurückgeben, von denen die meisten im Standardverzeichnis von Python liegen, und ich möchte dieses "Totem" nicht zu hoch im Baum, wenn die Schreibrechte nicht ausreichen, und raise:

So brauche ich einen einheitlichen Standardpfad, der ausreichende Berechtigungen zum Lesen/Schreiben von Dateien ohne die Notwendigkeit für externe Bibliotheken haben wird.

+0

'sys.path' ist trotzig __nicht__, was Sie brauchen, da es ist, wo Python nach ausführbaren Dateien und Bibliotheksdateien sucht - normalerweise sollten Sie nicht zu diesen Dateien schreiben. –

Antwort

2

Ich schlage vor, dass Sie appdirs verwenden: pip install appdirs

Dies Sie mit einer Reihe von Funktionen zur Verfügung stellt, die richtigen Wege zu bestimmen, in einer plattformunabhängig Weise zu nutzen.

  • appdirs.user_data_dir() geben Sie den Benutzerdatenverzeichnis
  • appdirs.user_config_dir() geben Sie dem Benutzer Konfigurationsverzeichnis
  • appdirs.user_cache_dir() Sie haben es

All das sollten Sie über ausreichende Berechtigungen verfügen, um zu schreiben, aber mit entsprechender Benennung, z .IhrAppName.totem sollten Sie feststellen, dass es nicht zufällig gelöscht wird. Vorfixierung mit. Auf den meisten Systemen wird die Datei unsichtbar, aber unter Windows müssen Sie möglicherweise auch die Datei aktiv verbergen.

+0

Appdirs? Ist das ein externes Modul? Weil ich will, dass dies keine Module von Drittanbietern hat ... Wie erwähnt, möchte ich, dass dieses Programm auf einer Vielzahl von Systemen ohne Abhängigkeiten läuft. –

+0

Appdirs ist eine plattformübergreifende Bibliothek, die Sie als Voraussetzung verwenden können, oder Sie können sie mit Ihrer Anwendung herunterladen, indem Sie sie von https://github.com/ActiveState/appdirs herunterladen und sie alle 557 Zeilen in Ihr App-Verzeichnis einfügen . Übrigens sagt deine Frage keine Abhängigkeiten. –

+0

Okay, ich habe meine Frage aktualisiert. Aber dieses Modul ist ziemlich cool ... Es ist ein bisschen sperrig, und nicht die einfachste Lösung war zu hoffen, aber wenn es auf anderen Plattformen funktioniert (was ich annehmen muss, kann ich es nicht selbst testen), ich könnte es leicht in eine packen.exe mit py2exe, da es keine Unordnung anderer Voraussetzungen erfordert! -Vielen Dank! :) –