Seite 1 von 1
Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:11
von draufunddran
Hallo,
ich hab gerade ein kleines Problem bei meinem Programm festgestellt. Ich printe immer vor jeder Teilaufgabe einen kurzen Text auf den Display, das gleiche mach ich wenn die Teilaufgabe zu ende ist.
Bsp.:
Code: Alles auswählen
print "Aufgabe 1 beginnt...",
Aufgabe1()
print "Aufgabe 1 beendet"
Ausgabe:
Aufgabe 1 beginnt... Aufgabe 1 beendet
Leider schreibt er "Aufgabe 1 beginnt..." erst wenn er zum print von "Aufgabe 1 beendet" kommt.
Woran liegt das, und wie kann ich das verhindern?
Vielen Dank,
Draufunddran
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:16
von Hyperion
draufunddran hat geschrieben:
Leider schreibt er "Aufgabe 1 beginnt..." erst wenn er zum print von "Aufgabe 1 beendet" kommt.
Wie kannst Du das feststellen?
Ohne wirklichen Code (z.B. was in Aufgabe() passiert und worin diese print-Statements enthalten sind) kann man schwerlich etwas dazu sagen...
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:18
von BlackJack
@draufunddran: Wo landen denn die Ausgaben? Auf einer Textkonsole oder in einem Fenster in irgendeiner IDE?
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:19
von draufunddran
Ich seh es am Bildschirm, dass die Funktion Aufgabe1() ziemlich Lange braucht bis sie dann endlich zum zweiten print kommt...
Der code ist ja völlig egal, das ist nur numbercrunshing.
Achja die Ausgaben landen in der Konsole.
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:22
von Hyperion
draufunddran hat geschrieben:Ich seh es am Bildschirm, dass die Funktion Aufgabe1() ziemlich Lange braucht bis sie dann endlich zum zweiten print kommt...
Naja, das ist doch das erwartete würde ich sagen...
Versuche das mal anchzuvollziehen; ich denke das erklärt es
Code: Alles auswählen
In [18]: from time import sleep
In [23]: def foo():
....: print "Hallo",
....: sleep(3)
....: print " Welt"
....:
....:
In [24]: foo()
Hallo Welt
In [25]: def bar():
....: print "Hallo"
....: sleep(3)
....: print " Welt"
....:
....:
In [26]: bar()
Hallo
Welt
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:28
von draufunddran
Also ich hab das jetzt im IDLE laufen lassen und sehen keinen unterschied.
Er printed beides mal "Hallo" und nach 3 sekunden " Welt"
mein problem ist ja das er den ersten Text erst anzeigt wenn er zum zweiten print komm. Aber ich will ja eben wissen wann und ob er überhaupt mit der aufgabe angefangen hat, und mit welcher aufgabe...
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:31
von Hyperion
draufunddran hat geschrieben:Also ich hab das jetzt im IDLE laufen lassen und sehen keinen unterschied.
Hm... muss dann ein IDLE spezifisches Problem sein!
draufunddran hat geschrieben:
Er printed beides mal "Hallo" und nach 3 sekunden " Welt"
In ipython eben nicht; die Variante mit "," am Ende wird erst dann geprintet, wenn die Funktion abgearbeitet wurde. Darauf wollte ich ja hinaus. Wieso das in IDLE anders geht ist mit dann ein Rätsel. Zudem ist es sonderbar, dass IDLE das bei Deinem Script anders handhabt!
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:35
von draufunddran
also mein code mit copy paste:
Code: Alles auswählen
import time
def foo():
print "Hallo",
time.sleep(3)
print " Welt"
def bar():
print "Hallo"
time.sleep(3)
print " Welt"
ich versuchst jetzt nochmal in der konsole...
wie bekommt man das den weg, das er es eben gleich anzeigt?
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:36
von draufunddran
Ja in der Konsole zeigt sich der Effekt jetzt auch...
Kennt da einer ne Lösung?
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:39
von gkuhl
Folgendes hilft:
Grüße
Gerrit
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:41
von Hyperion
draufunddran hat geschrieben:also mein code mit copy paste:
Code: Alles auswählen
import time
def foo():
print "Hallo", # <-- das "," ist der entscheidene Unterschied!
time.sleep(3)
print " Welt"
def bar():
print "Hallo" # <-- hier kein Komma
time.sleep(3)
print " Welt"
# ergänzt
foo()
bar()
Kann ja schon nicht komplett sein; es fehlen die Aufrufe
Bist Du sicher, dass Du das in IDLE hast ablaufen lassen? Wirklich exakt so? Ich kann mir da nicht vorstellen, inwiefern IDLE bei foo() schon ein "Hallo" printen kann...
Außerdem frage ich mich immer noch, wieso Dein Ursprungsscript in IDLE eben genauso reagiert, wie ich es in der Shell simuliert habe.
Wegbekommen ist ganz einfach; eben nicht per "," nach dem print in der selben Zeile "ausharren". Genau darin besteht ja der Unterschied zwischen den Varianten.
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:45
von Hyperion
gkuhl hat geschrieben:Folgendes hilft:
Grüße
Gerrit
Stimmt. Hier meine neue Version:
Code: Alles auswählen
In [46]: def foo(flush=True):
....: print "Hallo",
....: if flush:
....: sys.stdout.flush()
....: sleep(3)
....: print " Welt"
....:
....:
Der Aufruf foo() bewirkt nun, dass "Hallo" sofort geprintet wird, foo(False) das erst nach Abarbeiten von sleep alles zusammen ausgegeben wird.
Dennoch passt das ja immer noch nicht zur Beobachtung des OP

Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 10:52
von draufunddran
die Funktionsaufrufe hab ich dann schon in IDLE reingetippt, der code war nur die Funktionen das ist klar...
ich werd das mal mit dem flush() versuchen... DANKE schonmal ich denke ihr werden damit schon recht haben!
Grüße und Vielen Dank
Re: Print gibt zeichen erst beim nächsten print aus?
Verfasst: Montag 4. Oktober 2010, 12:15
von draufunddran
Funktioniert einwandfrei...
Danke