Seite 1 von 1

Print-Ausgabe an gleicher Stelle

Verfasst: Mittwoch 7. Januar 2009, 13:45
von OEP
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

Verfasst: Mittwoch 7. Januar 2009, 13:50
von BlackVivi

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?

Verfasst: Mittwoch 7. Januar 2009, 14:11
von OEP
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

Verfasst: Mittwoch 7. Januar 2009, 14:11
von helduel
Vielleicht eher sowas:

Code: Alles auswählen

>>> import sys
>>> for i in range(6):
...     sys.stdout.write("\r%i" % i)
... 
5
Gruß,
Manuel

Verfasst: Mittwoch 7. Januar 2009, 14:14
von str1442

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.

Verfasst: Mittwoch 7. Januar 2009, 14:20
von BlackVivi
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.

Verfasst: Mittwoch 7. Januar 2009, 15:39
von BlackJack
Aber *einfache* Sachen lassen sich mit `curses` *komplizierter* lösen. Also bei dieser Problembeschreibung würde ich bei '\r' bleiben.

Verfasst: Mittwoch 7. Januar 2009, 16:31
von bremer
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.

Verfasst: Mittwoch 7. Januar 2009, 16:51
von numerix
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.

Verfasst: Mittwoch 7. Januar 2009, 16:55
von Trundle
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.

Verfasst: Mittwoch 7. Januar 2009, 17:19
von 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.

Verfasst: Mittwoch 7. Januar 2009, 17:49
von bremer
Achso, vor 3.0 war mir das nur nicht aufgefallen. Ich wechsel oft das OS.