Bekomme keine Ausgabe mit wx.StandardPaths

Plattformunabhängige GUIs mit wxWidgets.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Bekomme keine Ausgabe mit wx.StandardPaths

Beitragvon JR » Montag 18. Dezember 2006, 17:46

Hi!

Seit einigen Tagen arbeite ich unter Ubuntu (Dapper Drake).

Folgender Code spuckt mir nur "starte..." aus. Weiß jemand, woran das liegen könnte?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx

print 'starte...'

sp = wx.StandardPaths.Get()
wx.GetApp().SetAppName("AppName")
print wx.GetApp().GetAppName()

for x in ['GetConfigDir',
          'GetUserConfigDir',
          'GetDataDir',
          'GetLocalDataDir',
          'GetUserDataDir',
          'GetUserLocalDataDir',
          'GetPluginsDir',
          'GetInstallPrefix',
          ]:
    func = getattr(sp, x)
    print func()


Wenn ich Python in der Konsole starte und

Code: Alles auswählen

import wx
sp = wx.StandardPaths.Get()


eingebe, schließt sich die Konsole nach einem Enter am Ende der 2. Zeile !!

[EDIT]
Vielleicht hilft der Hinweis, dass ich das Paket "wx2.6-examples" installiert habe und dort in der wxPython Demo das Beispiel zu den Standardverzeichnissen funktioniert!?

Viele Grüße
Jamil
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Bekomme keine Ausgabe mit wx.StandardPaths

Beitragvon gerold » Montag 18. Dezember 2006, 19:58

JR hat geschrieben:Weiß jemand, woran das liegen könnte?

Hi Jamil!

Der erste WX-Befehl muss immer das Starten der wx-Applikation sein.

Code: Alles auswählen

app = wx.PySimpleApp()

Natürlich gibt es auch Ausnahmen:

Code: Alles auswählen

wx.SetDefaultPyEncoding("utf-8")

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Permisson denied beim Anlegen eines Programmverzeichnisses

Beitragvon JR » Montag 18. Dezember 2006, 21:47

Hi Gerold!

Vielen Dank, das wusste ich nicht.

Ich habe nun leider noch ein anderes Problem.
Unter Windows habe ich keine Probleme gehabt, wenn ich ein Verzeichnis

Code: Alles auswählen

C:\Dokumente und Einstellungen\Anwendungsdaten\AppName

einen Ordner aus Python heraus anlegen wollte (auch wenn der angemeldete Benutzer keine Administratorrechte hatte). Unter Linux ist das passende Verzeichnis

Code: Alles auswählen

/etc/AppName

Doch hier gelten folgende Rechte

Code: Alles auswählen

drwxr-xr-x 114 root root  4096 2006-12-18 18:33 etc


Wenn ich aus Python heraus in diesem Verzeichnis mittels os.mkdir() ein Verzeichnis anlegen möchte kommt die Meldung

Code: Alles auswählen

OSError: [Errno 13] Permission denied: '/usr/share/AppName'


Um mein Programm plattformübergreifend zu machen, benötige ich aber einen Ordner, wo alle Schreibrechte haben.

Ungern würde ich es mit

Code: Alles auswählen

sudo chmod 0777 /etc

lösen.

Wie geht man hier vor?

Vielen Dank im Voraus!
Jamil
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 18. Dezember 2006, 22:21

Die Zugriffsrechte unter Linux kannst du nicht umgehen -- sonst waeren sie ja auch sinnlos. Und das mit dem sudo vergiss bitte ganz schnell wieder. :shock:

Das /usr -Verzeichnis ist fuer "feste" Daten, also alles, was einmal installiert wird und dann nicht mehr geaendert wird. Deswegen hat nur root dort Schreibrechte. Genaueres ueber die Verzeichnissgtruktur von Linux gibts z.B. hier: http://www.linuxfibel.de/dirstruct.htm.

Fuer Daten, die sich im Laufe der Anwendung aendern, ist das home-Verzeichnis da (oder /tmp). Viele Linux-Anwendungen erstellen sich ein Verzeichnis ~/.myAppName fuer Konfigurations-Dateien/Speichern von Einstellungen, fuer sonstige Daten fragt man den User.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 18. Dezember 2006, 22:29

Hi Rebecca!

Danke für die Tipps, das mit dem "sudo" war nicht ganz ernst gemeint. Und das Homeverzeichnis ansich ist auch geschützt.

Code: Alles auswählen

import os
os.mkdir('/home/AppName')

geht genauso wenig.

Die Daten sollen aber in dem geplanten Verzeichnis unabhängig vom Benutzer und mit der Installation entstehen.

Wo packe ich meine Programmdateien überhaupt am besten hin?
/opt ?

[EDIT]
Das einzige Verzeichnis neben /home/<benutzer>/
ist /tmp, wo jeder alles darf :-(

Gruß
Jamil
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 18. Dezember 2006, 22:34

JR hat geschrieben:Wo packe ich meine Programmdateien überhaupt am besten hin?
/opt ?

/opt vergisst du ganz schnell, das ist IMHO nur eine schlechte Idee aus Nürnberg gewesen. Du musst wohl einen Ordner mit den passenden Rechten irgendwo in /var anlegen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 18. Dezember 2006, 22:37

Hi!

Das geißt, wenn ich einen "Installer" von meinem Programm erstellen möchte, muss ich davon ausgehen, dass er mit root-Rechten ausgeführt wird und erst einmal einen entsprechenden Ordner anlegt und dort allen alle Rechte gibt?

Jamil
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 18. Dezember 2006, 22:38

JR hat geschrieben:

Code: Alles auswählen

import os
os.mkdir('/home/AppName')

geht genauso wenig.

Ich meinte schon /home/benutzer...

JR hat geschrieben:Die Daten sollen aber in dem geplanten Verzeichnis unabhängig vom Benutzer und mit der Installation entstehen.

Wenn die Daten mit der Installation entstehen und danach unveraendert bleiben, kannst du sie natuerlich in /usr/ oder /opt packen. Denn man geht normalerweise davon aus, dass root Programme installiert, somit waere das mit den Benutzerrechen kein Problem. Alternativ ist es natuerlich sinnvoll, dass ein Benutzer, der keine Root-Rechte hat (z.B. an der Uni, in der Firma,...) das Programm trotzdem installieren kann, da muss natuerlich alles (!) in das /home-Verzeichnis des Benutzers. Da koennte man beim Installationsvorgang eine extra Optionen fuer vorsehen...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 18. Dezember 2006, 22:39

JR hat geschrieben:Das geißt, wenn ich einen "Installer" von meinem Programm erstellen möchte, muss ich davon ausgehen, dass er mit root-Rechten ausgeführt wird und erst einmal einen entsprechenden Ordner anlegt und dort allen alle Rechte gibt?

Es reicht wenn die entsprechende Gruppe die richtigen Rechte hat, aber so ganz allgemein: ja, das bedeutet es.
Wäre ja auch noch schöner, wenn irgendwelche dahergelaufenen User zum Spaß irgendwo im Dateisystem ihre Daten ablagern würden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 18. Dezember 2006, 22:41

JR hat geschrieben:Das geißt, wenn ich einen "Installer" von meinem Programm erstellen möchte, muss ich davon ausgehen, dass er mit root-Rechten ausgeführt wird

Ja.

und erst einmal einen entsprechenden Ordner anlegt und dort allen alle Rechte gibt?l

Nein! Lesen koennen in /usr und so weiter ja alle. Wie gesagt, Daten, die nach der Installation von den Benutzern noch veraendert werden, gehoeren in deren Home-Verzeichnisse!
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 18. Dezember 2006, 22:45

Hi!

Okay, ich unterscheide halt nach OS.

Bei Windows bleibt es

Code: Alles auswählen

C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\AppName


unter Linux



Merke gerade einen Mist:
Man kann darüber streiten, ob Eclipse mit dem Plugin PyDEV zum Entwicklen mit Python toll ist oder nicht. Mir hat es bisher sehr gefallen. Allerdings ist es unter Linux im Gegensatz zu Windows unakzeptabel lahm :-(

Gruß
Jamil
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 18. Dezember 2006, 22:52

JR hat geschrieben:Man kann darüber streiten, ob Eclipse mit dem Plugin PyDEV zum Entwicklen mit Python toll ist oder nicht. Mir hat es bisher sehr gefallen. Allerdings ist es unter Linux im Gegensatz zu Windows unakzeptabel lahm :-(

Also haben wir noch jemanden, den wir zu Emacs und Vim konvertieren können. Vim läuft unter jedem System schnell :D

Allerdings verstehe ich nicht, warum du unter Windows in All Users schreibst und nicht in ~. Das ist simpel, verständlich und von vielen Programmen so übernommen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 18. Dezember 2006, 23:08

Hi!

Die Begründung ist einfach.
Das Programm läuft in zwei Sprachen. Die Sprachdateien möchte ich nicht für jeden Systembenutzer einzeln auf die Platte legen. Daher ein allgemeines Verzeichnis für alle Anwender. Das ist doch auch ganz üblich so.

Insgesamt gibt es eh zwei Mal plus 2 mal die Anzahl an Systembenutzern das Verzeichnis "Anwendungsdaten" unter Windows.
Jeweils lokal und im Netzwerk einmal für jeden Systembenutzer und dann nochmal für alle Benutzer.
Die *.ini-Datei meiner Software oder alle verwendeten Icons möchte ich doch nur ein einziges Mal während der Installation auf die Platte schreiben.

Gruß
Jamil
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 18. Dezember 2006, 23:15

Sprachdateien wuerdest du unter Linux aber auch nicht in ~ lagern, sondern in /usr/share oder so. Wie gesagt, root installiert das Programm, legt dabei /usr/share/myApp an mit den entprechenden Inhalten. Danach koennen alle User lesend drauf zugreifen, was fuer Sprachdateien ja auch ausreicht. Nur aendern (also schreibend zugreifen) duerfen die User /usr/share/myApp nich mehr.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 19. Dezember 2006, 17:41

JR hat geschrieben:Die Begründung ist einfach.
Das Programm läuft in zwei Sprachen. Die Sprachdateien möchte ich nicht für jeden Systembenutzer einzeln auf die Platte legen. Daher ein allgemeines Verzeichnis für alle Anwender. Das ist doch auch ganz üblich so.

Nein, Sprachdateien sind Teil des Programmes und sollten entweder unter Windows im Ordner mit dem Rest ges programmes sein oder unter anderen Systemen dort wo Sprachdateien untergebracht werden (wie Rebecca bereits sagte).
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder