Seite 1 von 1

Fehlerhaft dargestellter Prompt im interaktiven Interpreter

Verfasst: Sonntag 7. Juni 2015, 02:11
von kzi
Hallo zusammen,
ich benutze seit kurzem Linux, genauer gesagt Ubuntu 14.04.
nun habe ich ein ziemlich spezielles Problem:

Ich habe mir eine Datei .pythonrc in meinem homeverzeichnis angelegt mit folgendem Inhalt:

Code: Alles auswählen

import sys

sys.ps1 = '\033[93m\033[1m>>> \033[0m'
sys.ps2 = '\033[93m\033[1m... \033[0m'

print('\nmodule \033[93m\033[1msys\033[0m is already imported\n')
Die Umgebungsvariable PYTHONSTARTUP verweist auf diese Datei.

Damit bezwecke ich, dass der Prompt im interaktiven Python-Interpreter gelb und fettgedruckt erscheint.
Dies funktioniert auch soweit, wie geplant, jedoch ist mir danach beim Experimentieren etwas aufgefallen.
Folgendes habe ich eingegeben:

Code: Alles auswählen

for i in range(10):
 print(i)
Dadurch wurde auch die zu erwartende Ausgabe erzeugt.

Wenn ich nun jedoch in der Python-History 'zurückblättere' (durch drücken der Pfeil-nach-oben-Taste) bis zu der Zeile
for i in range(10):
,
und dann weiter 'blättere', bleibt diese Zeile hinter dem Prompt teilweise stehen und kann auch nicht mit BACKSPACE gelöscht werden.
Wenn ich zum Beispiel wieder zur aktuellen (leeren) Zeile 'blättere', sieht die Zeile samt Prompt so aus:
>>> for i in rang
Der Teil, der stehen bleibt, wird jedoch beim drücken der Enter-Taste nicht ausgeführt, so als sei die Zeile leer.
Man kann trotzdem Code eingeben, der auch ausgeführt wird, es sieht halt nur komisch aus.
Wenn ich den Inhalt der Umgebungsvariable PYTHONSTARTUP vor aufrufen des Interpreters lösche, besteht das Problem nicht,
daher muss es denke ich mit dem oben geposteten Inhalt der Datei .pythonrc zu tun haben.
Hat jemand vielleicht eine Idee?

Re: Fehlerhaft dargestellter Prompt im interaktiven Interpre

Verfasst: Sonntag 7. Juni 2015, 08:25
von Sirius3
@kzi: das zugrundeliegende readline erkennt Deine Escape-Sequenzen nicht und denkt, der Prompt wäre 17 Zeichen lang. Man muß ihm also mit speziellen Start- und Stopzeichen kenntlich machen, was nicht dargestellt wird:

Code: Alles auswählen

sys.ps1 = '\001\033[93m\033[1m\002>>> \001\033[0m\002'

Re: Fehlerhaft dargestellter Prompt im interaktiven Interpre

Verfasst: Sonntag 7. Juni 2015, 15:49
von kzi
@Sirius3: Danke für die schnelle Antwort. Habe es geändert und jetzt tritt das Problem nicht mehr auf. Top! 8)