Unerwartetes Ausgabeverhalten der BPython-Konsole

449
iago-lito

Ich verwende BPython, um Python-Skripts auszuführen, und ich fand, dass die Konsolenausgabe ein anderes Verhalten als die reguläre Python-Konsole hat. Zum Beispiel dieser kleine Ausschnitt:

import time for i in range(100): time.sleep(.1) print("\r{}".format(i), end="") 

Ausgaben in Python:

99 | >>> | 

aber Ausgaben in BPython:

26 | 51 | 75 | 99 | >>> | ^ end of the console 

Diese scheinbar zufälligen Zahlen hängen gerade auf meiner Konsole Breite . Ich vermute, dass der BPython-Cursor bei jedem Aufruf nach rechts verschoben wird, printobwohl die Zeichenfolge mit a beginnt \r. Wenn das rechte Ende der Konsole erreicht ist, kann die aktuelle Zeile nicht mehr gelöscht werden. Daher wird eine neue Zeile gestartet.

Irgendwelche Möglichkeiten, dies zu beheben?

UPDATE: (Bug berichtet dort )

1

1 Antwort auf die Frage

1
Thomas

Ich empfehle bpython-cursesstattdessen die Verwendung, wenn Sie dieses Verhalten benötigen, da das Standard-Bpython-Frontend (wie Sie bemerkt haben) nicht richtig damit umgehen kann. Ihre Erklärung ist ungefähr richtig: bpython protokolliert die Ausgabe in einer gefälschten sys.stdout und versucht dann zu raten, wie sie gerendert werden soll. Seine Vermutung ist sehr naiv, und obwohl es eine begrenzte Anzahl von Escape-Sequenzen bei der Formatierung des Terminals berücksichtigt, berücksichtigt es keine Wagenrückläufe. Der Cursor wird auf eine Zeile im Terminal verschoben und diese berechnete Zeile wird geschrieben. Das Ergebnis ist das, was Sie sehen.

Dies scheint das zu sein, was ich brauchte. Vielen Dank! :) iago-lito vor 9 Jahren 0