Ausgabe eines Schleifencounters, der sich überschreibt

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
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

ich bin ganz neu hier im Forum und habe direkt eine Frage, da ich bisher niemanden gefunden habe, der mir weiterhelfen kann.
Zu meinem Problem:
Ich habe eine For-Schleif und möchte im Output-Fenster gerne, dass während diese Schleife im Sekundentakt läuft, eine Anzeige läuft und die Sekunden hochzählt.
Leider bekomme ich es nur hin, dass die Zahlen untereinander geschrieben werden, oder hintereinander. Dass die Zahlen "übereinander" geschrieben werden, schaffe ich nicht. Ich habe schon von mehreren Leuten gehört ich solle "\r" verwenden, aber damit bekomme ich eher noch einen neuen Absatz.
Hier meine code an dem ich herumprobiere:

import time
counter = 0
for i in range(10):
time.sleep(1)
print counter,
counter = counter + 1

Damit bekomme ich die Zahlen in eine Zeile, wenn ich das Komma weglasse wird alles untereinander geschrieben.
Ich hoffe Ihr könnt mir weiterhelfen.

Vielen Dank,
Jens
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich würde print als Funktion verwenden statt print als Statement. Damit ist man dann auch gleich für Python 3 gerüstet.

Code: Alles auswählen

from __future__ import print_function
import time

for i in xrange(10):
    print(i, end='\r')
    time.sleep(0.250)
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

danke für die Antwort. Ich habe mich in diese Funktion etwas hineingelesen, da es bei mir leider auch nicht funktioniert. Ich bekomme einen Syntax Error in der print Zeile. Kann es vielleicht daran liegen, dass ich Python 2.5.1 verwende? Ich kann leider nicht auf eine andere Version umsteigen, da es in einem größeren System eingebunden ist.

Vielen Dank,
Jens
deets

Ja, daran liegt es.

Das hier geht fuer mich:

Code: Alles auswählen


import time
import sys

print

for i in xrange(10):
    print "\r%i" % i,
    sys.stdout.flush()
    time.sleep(.4)
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

leider immernoch nicht erfolgreich :cry:. Es wird immernoch alles unteraneinder geschrieben.
Ich habe auch schon mit \r an den verschiedensten Stellen herumprobiert.

Ich versteh aber nicht was an meinem System so anders ist. Ich benutze PythonWin, ich dachte eigentlich, dass es ein ganz normaler Compiler sei. Ich habe dort ein Script erstellt und dieses führe ich dann aus. Aber leider schreibt er mir im Outputfenster alle die Zahlen stets untereinander.

Grüße,
Jens
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Denker hat geschrieben:Ich benutze PythonWin, ich dachte eigentlich, dass es ein ganz normaler Compiler sei.
PythonWin ist eine Entwicklungsumgebung und weder ein Compiler noch ein Interpreter (gesetzt den Fall, dass wir hier wirklich über http://wiki.python.org/moin/PythonWin reden). Möglicherweise interpretiert diese Umgebung ja Ausgaben ein wenig eigenwillig. Lass dein Skript doch mal mit python skriptname.py im Konsolenfenster laufen statt in der IDE.

Folgender Code läuft bei mir anstandslos.

Code: Alles auswählen

for i in xrange(10):
    print i, '\r', 
    time.sleep(0.250)
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

ich habe es nun in der Konsole laufen lassen und dort funktioniert es auch bei mir.
Leider scheint aber die Umgebung, in der ich arbeite die selbe Ausgabe zu nutzen, wie bei PythonWin das "interactive Window". In der Konsole werden die Zahlen super gut überschrieben, aber in der interaktiven Ansicht nicht.
Wenn es dafür wirklich keine Lösung gibt, dann werde ich wohl den Bisherigen Output Text in ein File schreiben müssen und nach jeder neuen Zahl das Ausgabefenster löschen, damit habe ich auch einen ähnlichen Effekt, aber nicht gerade elegant.

Viele Grüße und danke für die Hilfe,
Jens
deets

Da du uns nicht verraetst, was deine "Umgebung" ist, werden wir dir wohl auch nicht weiter helfen koennen. Und solche Informationen gehoeren eigentlich zur Problemstellung dazu, besser also gleich erwaehnen in der Zukunft.
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

ich dachte vielleicht kann ich das auch umgehen. Aber anscheinend ist mein Anliegen doch etwas schwieriger.
Ich verwende Automation Desk von dSPACE und ich automatisiere Tests damit. Dieses Tool ist in Python programiert und man kann auf einfache Weise einzelne Code-Zeilen auch in Python implementieren. Der Support verweist stets darauf, dass ich mich in Python einarbeiten soll. Nur leider bin ich eben nun an meine Grenzen gestoßen.

Ich kann Schleifen und andere Funktionen über vorgefertigte Blöcke erstellen. Wenn ich ein einfaches "print" verwende wird etwas im Output Fenster ausgegeben. In sogenannten EXEC-Blöcken kann ich dann Python-Code einfügen. Damit es etwas "schöner" aussieht und auch eher analysiebar ist, wollte ich eben, dass die Zahlen übereinander hochgezählt werden. Denn ich habe Tests, die auch mal 1200 Sekunden dauern und um herauszufinden, was darüber gestanden hat ist es leider eher unpraktisch dann alles hochzufahren. Es sieht denke ich auch besser aus, wenn ich danach ein Log-File aus dem Output generiere. Ich könnte auf der anderen Seite auch einfach nichts ausgeben, aber leider bekommt man dann keinerlei Feedback, ob überhaupt etwas läuft und wie lange es noch laufen wird.

Ich bin leider auch nicht gerade sehr bewandert in Programmiersprachen. Bisher habe ich eher mit graphischen Programmiersprachen gearbeitet.

Ich hoffe dass diese Informationen nun weiterhelfen.

Danke fürs Feedback,
Jens
deets

Ich kenne diese Software nicht - und es ist unwahrscheinlich, dass das hier jemand anderem anders geht.

Du solltest dich also eher an ein spezialisiertes Forum und andere Form des Supports wenden. Es koennte zB sein, dass die Software einen Progress-Bar oder etwas aehnliches anbietet, welchen man von Python aus ansprechen kann, und damit den Fortschritt vermeldet.

Unter Umstaenden versteht das Terminal von Automation Desk auch noch andere Steuercodes - aber ich bezweifele es, wenn es schon beim simpelsten aller Varianten nicht das richtige macht.

Mit Python-Einarbeitung hat das jetzt aber dann auch nicht mehr wirklich was zu tun - sondern die Loesung ist spezifisch fuer das Tool, und damit eine Frage an deren Support.

Was das Tool kann, wurde hier uebrigens schon mal diskutiert:

http://www.python-forum.de/viewtopic.php?p=107897
Denker
User
Beiträge: 12
Registriert: Montag 7. November 2011, 09:54

Hallo,

ich habe mich extra an Euch gewendet, nachdem ich dieses Verhalten auch im Output Fenster bei PythonWin gesehen habe. Ich hatte den Gedanken gehabt und auch gehofft, dass sich dieses gleich der Ausgabe der Kommandozeile verhält.
Aber nun bin ich zumindest schonmal weiter und weiß, dass es nicht nur an mir gelegen hat. Denn ähnliche Ansätze hatte ich auch schon, aber keiner hat zum Erfolg geführt, weil ich es eben nie im Kommandozeilenfenster versucht habe.
Den Link werde ich mir noch einmal genauer anschauen, vielleicht finde ich dort auch noch weitere Informationen, die mir bei anderen Problemen helfen können.

Vielen Dank und grüße,
Jens
Antworten