Fehlerhaft dargestellter Prompt im interaktiven Interpreter

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
kzi
User
Beiträge: 2
Registriert: Sonntag 7. Juni 2015, 01:09

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?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@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'
kzi
User
Beiträge: 2
Registriert: Sonntag 7. Juni 2015, 01:09

@Sirius3: Danke für die schnelle Antwort. Habe es geändert und jetzt tritt das Problem nicht mehr auf. Top! 8)
Antworten