Print-Ausgabe an gleicher Stelle

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
OEP
User
Beiträge: 3
Registriert: Mittwoch 7. Januar 2009, 13:33

Hallo,

ich versuche mich gerade in Python einzuarbeiten und habe eine Frage zur Ausgabe in der Shell. Wie ist es möglich z.B. die Ausgabe eine For-Schleife in eine Zeile zu bekommen? D.h. nicht so:
1
2
3
4
5
6
....
sondern bei jedem Schleifendurchlauf die vorhergehende Ziffer löschen und die aktuelle Ziffer an diese Position zu schreiben.

Viele Grüße
OEP
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Code: Alles auswählen

In [1]: for i in range(6):
   ...:     print i,
   ...:
   ...:
0 1 2 3 4 5

In [2]: import sys

In [3]: for i in range(6):
   ...:     sys.stdout.write("%s" % i)
   ...:
   ...:
012345
Sowas?
OEP
User
Beiträge: 3
Registriert: Mittwoch 7. Januar 2009, 13:33

nee,
ich meinte, die neue Ziffer an die gleiche Stelle der zuvor ausgegebenen.

Null ausgeben -> nächster Schleifendurchlauf Null löschen und an die Stelle die Eins schreiben usw., so dass zuletzt nur die letzte Ziffer der Schleife angezeigt wird

Mfg
OEP
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Vielleicht eher sowas:

Code: Alles auswählen

>>> import sys
>>> for i in range(6):
...     sys.stdout.write("\r%i" % i)
... 
5
Gruß,
Manuel
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Code: Alles auswählen

In [7]: for i in xrange(5):
    time.sleep(0.5)
    sys.stdout.write("\r%d" % i)
   ...:     sys.stdout.flush()
   ...:     
   ...:     
Ob \r aber die beste Idee dafür ist weiß ich nicht.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Für solch Operationen würd ich mir vielleicht mal curses mal ansehen (oder Wconio für Windows)... damit lassen sich kompliziertere Textaufgaben auf'r Konsole besser lösen.
BlackJack

Aber *einfache* Sachen lassen sich mit `curses` *komplizierter* lösen. Also bei dieser Problembeschreibung würde ich bei '\r' bleiben.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Funktioniert bei mir alles nicht.

Übrigens:

Code: Alles auswählen

>>> import curses
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import curses
  File "C:\Python30\lib\curses\__init__.py", line 15, in <module>
    from _curses import *
ImportError: No module named _curses
Das habe ich seit Python 3.0.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

bremer hat geschrieben:Funktioniert bei mir alles nicht.
[Code s.o.]
Das habe ich seit Python 3.0.
Bei mir funktioniert es mit Python 3.0:

Code: Alles auswählen

ActivePython 3.0.0.0 (ActiveState Software Inc.) based on
Python 3.0 (r30:67503, Dec 10 2008, 15:46:42) 
[GCC 3.3.1 (SuSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> 
Edit: Jetzt sehe ich es erst, du benutzt Windows. Da geht curses sowieso nicht. Auch vor 3.0 nicht.
Zuletzt geändert von numerix am Mittwoch 7. Januar 2009, 17:14, insgesamt 1-mal geändert.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

bremer hat geschrieben:

Code: Alles auswählen

>>> import curses
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import curses
  File "C:\Python30\lib\curses\__init__.py", line 15, in <module>
    from _curses import *
ImportError: No module named _curses
Das habe ich seit Python 3.0.
Das bezweifle ich aber stark. Zumindest unter Windows. Oder du hattest etwas wie WCurses installiert.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
BlackJack

`curses` gibt's nicht unter Windows, jedenfalls nicht in der Standardbibliothek und für '\r' muss das Programm, welches die Ausgabe entgegennimmt, das natürlich entsprechend interpretieren. Eingebettete Interpreter in IDEs oder IDLE machen das nicht, da braucht man schon ein Terminal o.ä. für.

Also mit anderen Worten: Eine wirklich allgemeine Lösung gibt's nicht.

Das mit dem '\r' ist aber üblich bei Konsolenprogrammen, die nicht gleich die volle Kontrolle über's Terminal haben wollen.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Achso, vor 3.0 war mir das nur nicht aufgefallen. Ich wechsel oft das OS.
Antworten