Seite 1 von 1
probleme mit for schleifen zeilen ausgabe
Verfasst: Mittwoch 17. Dezember 2008, 20:54
von unlimitopen
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.
Verfasst: Mittwoch 17. Dezember 2008, 21:05
von Leonidas
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?
Verfasst: Mittwoch 17. Dezember 2008, 21:05
von BlackJack
Und die Frage ist? Meine wäre: Was ist `d` nochmal? Du rufst es ja mit `line` auf. Was ist `line`?
.....
Verfasst: Mittwoch 17. Dezember 2008, 21:15
von unlimitopen
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]
Verfasst: Mittwoch 17. Dezember 2008, 21:17
von jonas
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

MfG Jonas

EDIT: Als ich anfing meinen Post zu schreiben, war noch kein anderer
da^^
Verfasst: Mittwoch 17. Dezember 2008, 21:21
von unlimitopen
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
Verfasst: Mittwoch 17. Dezember 2008, 21:22
von DasIch
Guck mal in den Code ein Post über deinem.
Verfasst: Mittwoch 17. Dezember 2008, 21:24
von unlimitopen
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.
Verfasst: Mittwoch 17. Dezember 2008, 21:26
von Trundle
Strings haben eine `splitlines`-Methode. Oder direkt über `p.stdout` iterieren. Aber ``onPress`` wird so ohne weiteres auch nicht funktionieren.
Verfasst: Mittwoch 17. Dezember 2008, 21:30
von numerix
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
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.)
Verfasst: Mittwoch 17. Dezember 2008, 21:32
von unlimitopen
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

Verfasst: Mittwoch 17. Dezember 2008, 21:33
von Hyperion
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?
Verfasst: Mittwoch 17. Dezember 2008, 21:37
von unlimitopen
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

Verfasst: Mittwoch 17. Dezember 2008, 21:42
von jonas
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

Verfasst: Mittwoch 17. Dezember 2008, 21:48
von unlimitopen
Nochmals hallo zusammen,
Da ich nun ganz deutlich merke das es nicht so einfach wird habe ich mal wieder eine Frage an euch...
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 ?
Verfasst: Donnerstag 18. Dezember 2008, 14:07
von 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.