probleme mit for schleifen zeilen ausgabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

Hallo zusammen,

erst einmal danke für eure Hilfe! Ich habe hier schon einiges nachlesen können, doch leider benötige ich nochmals eure Hilfe.

Code: Alles auswählen

for i in d(line):
    chk = Checkbutton(root, text=str(i), command=(lambda i=i: onPress(i)) )
    chk.pack()
    states.append(0)
root.mainloop()
print states         
d ist das ergebnis einer mount -l abfrage.
Die Abfrage besteht aus 10 - 15 Zeilen.
Ich möchte gerne das die Abfrage Zeilenweise ausgegeben wird - damit wie ihr seht pro Zeile ein Checkbutton entsteht.

Sorry, so was hatte ich noch nicht gefunden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn ``d`` das Ergebnis ist, also ein String, warum rufst du es wie eine Funktion auf? Und warum hat es so einen schlechten, nichtssagenden Namen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Und die Frage ist? Meine wäre: Was ist `d` nochmal? Du rufst es ja mit `line` auf. Was ist `line`?
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

Hallo zusammen,

ja, recht habt ihr - ich hätte es output nennen sollen oder so ähnlich, aber da ich nach einer passenden lösung suche und ich nicht weitergekommen bin habe ich der kurzen Schreibweise nur ein 'd' genommen ;-)

der Versuch mit 'line' ist dadurch entstanden es sinnbildlich wieder zu geben, das es keinen Sinn macht habe ich ja gesehen ....

also das vorherige Script

Code: Alles auswählen

p=subprocess.Popen(["mount", "-l"], stdout=subprocess.PIPE)
d=p.communicate()[0]
    
states = []
def onPress(i):                       
    states[i] = not states[i]   

root = Tk()
for i in d(line):
    chk = Checkbutton(root, text=str(i), command=(lambda i=i: onPress(i)) )
    chk.pack()
    states.append(0)
root.mainloop()
print states    

Es ist noch kein Meister vom Himmel gefallen[/code]
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Wie wäre es mit einer konkreten Fehlermeldung/ Fehlerbeschreibung?
Ich sehe da jetzt so kein Problem, bei mir funktioniert sowas:

Code: Alles auswählen

## Button Creator

import Tkinter as tk

root = tk.Tk()
root.title("Button Creator")
for a in range(10):
    test = tk.Checkbutton(root,text=str(a))
    test.pack()
root.mainloop()
bringt
Bild
MfG Jonas :D
EDIT: Als ich anfing meinen Post zu schreiben, war noch kein anderer
da^^
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

danke,

mit dem range Eintrag ist das sogar für mich inzwischen verständlich, aber wie erstelle ich anhand einer variablen Liste eine variable Anzahl an Checkbuttons?

Grüße
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Guck mal in den Code ein Post über deinem.
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

Code: Alles auswählen

p=subprocess.Popen(["mount", "-l"], stdout=subprocess.PIPE)
d=p.communicate()[0] 
ergibt
  • /dev/mapper/VolGroup00-rootlv on / type ext3 (rw,relatime,errors=remount-ro) []
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    /proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    varrun on /var/run type tmpfs (rw,nosuid,mode=0755)
    varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    fusectl on /sys/fs/fuse/connections type fusectl (rw)
    /dev/sda1 on /boot type ext3 (rw,relatime) []
    /dev/mapper/VolGroup00-virtuallv on /data1/virtual_lv type ext3 (rw,relatime) []
    /dev/mapper/VolGroup00-homelv on /home type ext3 (rw,relatime) []
    securityfs on /sys/kernel/security type securityfs (rw)
    binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
    gvfs-fuse-daemon on /home/christian/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=test)
Jede Zeile soll einen checkbutton erzeugen ...
Dieser Checkbutton kann dann ausgewählt werden und danach erfolgt eine Durchführung z.B. dd if='var1' of='image'
usw.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Strings haben eine `splitlines`-Methode. Oder direkt über `p.stdout` iterieren. Aber ``onPress`` wird so ohne weiteres auch nicht funktionieren.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

unlimitopen hat geschrieben:Jede Zeile soll einen checkbutton erzeugen ...
Dieser Checkbutton kann dann ausgewählt werden und danach erfolgt eine Durchführung z.B. dd if='var1' of='image' usw.
Ja, dann mal los ....

Aber mit d(list) wird das nichts. Was soll das denn sein?
d ist doch eine Zeichenkette, der kannst du doch kein Argument übergeben :shock:

Wenn du die Ausgabe von mount -l zeilenweise in eine Liste packst, dann solltest du es hinbekommen:

Code: Alles auswählen

import subprocess

proc = subprocess.Popen(["mount", "-l"], stdout=subprocess.PIPE)
items = proc.communicate()[0].splitlines()
for item in items:
    print item
(Die Ausgabe unterscheidet sich zwar kaum von deiner geposteten, aber damit bist du trotzdem schon ein Stück weiter, weil du nicht mehr die gesamte Ausgabe als *eine* Zeichenkette hast.)
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

wenn aus der Liste nur das 2 Wort als variable Filtere und diese dann neben einem Checkbutton erscheint dann hätte ich den Namen der Partition und hätte auch die "Bedeutung" dieser Partition (Bsp.: homelv)

..... ich schau mal wie ich es hinbekomme ......

danke Trundle

:::::EDIT::::

items = proc.communicate()[0].splitlines()

wusste ich nicht - muss mich mehr um die Dokumentation kümmern :-(
Zuletzt geändert von unlimitopen am Mittwoch 17. Dezember 2008, 21:44, insgesamt 2-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

unlimitopen hat geschrieben:noch eine kurze Frage:

wenn aus der Liste nur das 2 Wort als variable Filtere und diese dann neben einem Checkbutton erscheint dann hätte ich den Namen der Partition und hätte auch die "Bedeutung" dieser Partition (Bsp.: homelv)

..... ich schau mal wie ich es hinbekomme ......

danke Trundle
Wo ist hier die Frage?
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

mein Post war zu langsam...

Wo ist hier die Frage?
Manchmal benötige ich nur eine Richtung in die ich gehen könnte - überlegen kann ich noch selber - ok, das spricht nicht fürs lesen der Dokus :-)
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Hoffe nicht schon wieder zu spät zu posten...

Code: Alles auswählen

import Tkinter as tk

### hier kommt irgendwo die ausgabe des
### mountbefehls in deine variable ausgabe und dann...

ausgabe = ausgabe.split("\n")

root = tk.Tk()

for i in ausgabe:
    button = tk.Checkbutton(root,text=i)
    button.pack()

root.mainloop()
MfG Jonas :D
unlimitopen
User
Beiträge: 13
Registriert: Sonntag 14. Dezember 2008, 15:24

Nochmals hallo zusammen,

Da ich nun ganz deutlich merke das es nicht so einfach wird habe ich mal wieder eine Frage an euch... :roll:

ich tue mich im Moment sehr schwer damit die Dokumentationen zu lesen - vor allem www.pydoc.org - ich sehe die Zusammenhänge der einzelnen Funktionen nicht:

items = proc.communicate[0]().splitlines()

ich wäre nicht darauf gekommen splitlines da noch dran zu hängen....

1. was könnt und wollt ihr mir vielleicht noch für Tipps geben?
2. Welche Entwicklungsumgebung nutzt Ihr?
3. Gibt es eine komplette deutsche Python Hilfe ähnlich wie www.pydoc.org ?
lunar

unlimitopen hat geschrieben:items = proc.communicate[0]().splitlines()

ich wäre nicht darauf gekommen splitlines da noch dran zu hängen....
Naja, so schwer ist das doch nicht. ".communicate()[0]" gibt dir eine Zeichenkette zurück, die du weiterverarbeiten willst. Also schaust du dir die Dokumentation zu Zeichenketten an und findest da eben die passende Methoden ".splitlines()".
2. Welche Entwicklungsumgebung nutzt Ihr?
Emacs + IPython.
3. Gibt es eine komplette deutsche Python Hilfe ähnlich wie www.pydoc.org ?
Eine deutschsprachige Referenz kenne ich nicht, aber es gibt die offizielle Dokumentation, die eigentlich nichts vermissen lässt.
Antworten