[Python-de] Testen, ob Variabel existiert

Marcus Habermehl bmh1980de at yahoo.de
Mon Sep 6 18:12:01 CEST 2004


Hallo.

Am Son, den 05.09.2004 um 17:10 Uhr +0200 schrieb Diez B. Roggisch:
> > for wm in wms:
> >     rb = wm
> >     for path in paths:
> >         if access(path+'/'+wm, X_OK):
> >             if group:
> >                 rb = gtk.RadioButton(label = wm, group = group)
> >             else:
> >                 rb = gtk.RadioButton(label = wm)
> >                 group = rb
> >             vbox1.pack_start(rb)
> >             rbs.append(rb)
> >             break
> 
> Schon fast perfekt - statt path + '/' + wm solltest du aber os.path.join 
> verwenden - das ist erstens Plattformunabhaengig (fuer dich vielleicht nicht 
> se wichtig, aber guter Stil schadet nie) und ausserdem sollte das auch mit 
> Sonderfaellen besser klarkommen, zB Pfaden mit / am Ende.

Ich habe jetzt die Zeile "if access(path+'/'+wm, X_OK):" durch if
"access(path.join(path, wm), X_OK):" ersetzt.

Beim Aufruf des Skriptes erhalte ich diese Fehlermeldung:

TypeError: join() takes exactly one argument (2 given)

Laut meinem schlauen Büchlein ist der Aufruf von join richtig. Daher
versteh ich den Fehler nicht so ganz.

> > Mein ursprüngliches Problem habe ich dann so gelöst.
> >
> > for rb in rbs:
> >     if rb.get_active() == True:
> >         wm = rb.get_label()
> >         system(wm)
> >         break
> 
> Hier bietet sich eher an, stattdessen eine Map von rb auf wm aufzubauen - denn 
> das Label kann ja zb auch mal anders aussehen, zB "KDE" oder so. 

Das Label ist immer der Aufruf des WMs. Siehe ganz oben (label = wm).
Eigentlich wollte ich entsprechend die Labels ändern. Zumindest für
Xfce4, KDE und Gnome. Der Aufruf startxfce4, startkde und gnome-session
als Label sieht nicht sehr schön aus. 

Aber als Lösung dafür ist mir auch nur dieses eingefallen.

[ ... Testen ob WM existiert ... ]
if wm == 'gnome-session':
    label = 'Gnome'
elif wm == 'startkde':
    label = 'KDE'
elif wm == 'startxfce4':
    label = 'XFce4'
else:
    label = wm
[ ... Aufbau der RadioButton ... ]

Hier taucht aber ja wieder das Problem auf, wenn Gnome mal nicht über
gnome-session aufgerufen wird, müsste das Skript auch wieder an mehreren
Stellen angepasst werden.

> Dazu musst du nur
> 
> wms = {}
> 
> anlegen und nach der Zeile 
> 
> >             vbox1.pack_start(rb)
> 
> wms[rb] = wm 
> 
> machen. Du kannst dann mit 
> 
> wms[rb] 
> 
> darauf zugreifen in deinem snippet oben.

Kannst du mir das genauer erklären? Ich habe nur in einem meiner Bücher
was über map() gefunden. Aber weder das noch die Info von help(map)
verstehe ich wirklich.

Du hast in einer Mail ein Config-File angesprochen. Der Gedanke wäre
vielleicht ganz gut um das eine oder andere Problem zu lösen.

Zum Beispiel für mögliche WMs und das Label. Ich habe aber nirgendwo in
meinen Büchern einen Hinweis gefunden, wie man das am Besten realisiert.

Hast du da vielleicht auch einen Tipp für mich?

Gruß

Marcus