nihilist hat geschrieben:Ich möchte einfach eine Textdatei im jeweiligen /home/ Verzeichniss des Benutzers anlegen.
Hallo nihilist!
In diesem Beitrag
http://www.python-forum.de/post-50638.html#50638 handelt es sich um ein ähnliches Problem. Allerdings in Verbindung mit wxPython.
Kurze Erklärung:
Unter Linux ist alles recht klar. Eine Dilde "~" kennzeichnet den Home-Ordner des aktuellen Benutzers. Programme können unterhalb dieses Ordners sichtbare oder unsichtbare Ordner oder Dateien mit Einstellungen ablegen.
Ein ``os.path.expanduser("~")`` gibt unter Linux den oben besprochenen Home-Ordner des aktuellen Benutzers zurück. Unter Windows XP gibt dieser Befehl ebenfalls den Home-Ordner des aktuellen Benutzers zurück. Allerdings ist es nicht erwünscht, dass innerhalb dieses Ordners von Programmen Einstellungen abgelegt werden.
Bei mir ist der Home-Ordner z.B. 'J:\\Dokumente und Einstellungen\\Gerold'.
Unter Windows ist es ein wenig komplizierter, da man Windows für "Wandernde Benutzer" so konfigurieren kann, dass die Programmeinstellungen nicht nur auf dem lokalen Computer, sondern auf jedem Computer im Netz, auf dem ich mich anmelde, zur Verfügung stehen. Zu diesem Zweck gibt es eigene Registry-Schlüssel, und eigene Ordner, mit Einstellungen, die von einem Windows-Server (ActiveDirectory oder Domain-Controler) verwaltet werden und beim Anmelden an einen Computer an den Client-Computer übermittelt werden.
Damit es kein Durcheinander gibt, muss man die Art der Einstellungen unterscheiden. Fensterposition und Größe sind Einstellungen, die nur auf dem lokalen Computer Sinn machen, da andere Computer andere Monitorauflösungen haben könnten. Auch eine Liste mit zuletzt geöffneten Dateien sollte lokal bleiben und nicht an andere Computer übermittelt werden, da es ja nicht ausgeschlossen ist, dass ein Pfad nur auf dem lokalen Computer zur Verfügung steht.
Als Beispiel: Wenn du einen Browser programmierst, dann sind Position und Größe des Browserfensters lokale Einstellungen. Die Favoriten/Bookmarks und die zuletzt eingegebenen URLs sind Einstellungen, die auch an andere Computer, an denen du dich anmeldest, übermittelt werden sollen.
Der Pfad zum Hauptordner für "Wandernde Benutzereinstellungen" lässt sich über die Umgebungsvariable "APPDATA" erfragen. Aber leider gibt es keine Umgebungsvariable, die den Hauptordner für "Lokale Benutzereinstellungen" zurück gibt.
wxPython hat dafür ``wx.StandardPaths``. Damit lassen sich die Ordner genau bestimmen:
Code: Alles auswählen
>>> import wx
>>> app = wx.PySimpleApp()
>>> app.SetAppName("MyApp")
>>> wx.StandardPaths_Get().GetUserDataDir()
u'J:\\Dokumente und Einstellungen\\Gerold\\Anwendungsdaten\\MyApp'
>>> wx.StandardPaths_Get().GetUserLocalDataDir()
u'J:\\Dokumente und Einstellungen\\Gerold\\Lokale Einstellungen\\Anwendungsdaten\\MyApp'
>>>
Ich empfehle deshalb, besonders bei GUI-Anwendungen mindestens eine Datei mit "lokalen Einstellungen" und eine mit "Einstellungen" zu verwenden.
Kann man wxPython nicht heranziehen, dann ist die Funktion ``get_settings_folder()`` [wiki]Profilpfad herausfinden[/wiki]auf jeden Fall viel besser, als alles in den Home-Ordner des Benutzers zu schreiben.
mfg
Gerold