Ich verwende das readline
Modul mit Python 2.7.3 mit Fedora 17. Ich habe dieses Problem nicht mit Ubuntu 12.10.Python readline Modul druckt Escape-Zeichen beim Import
Während import readline
wird ein Escape-Zeichen angezeigt.
$ python -c 'import readline' |less
ESC[?1034h(END)
Normalerweise, wenn ich unerwartet Ausgabe wie diese zu erhalten, behandeln ich es stdout/stderr
Umleitung zu einem Dummy-Dateideskriptor (Beispiel unten) verwendet wird. Aber dieses Mal funktioniert diese Methode nicht.
import sys
class DummyOutput(object):
def write(self, string):
pass
class suppress_output(object):
"""Context suppressing stdout/stderr output.
"""
def __init__(self):
pass
def __enter__(self):
sys.stdout = DummyOutput()
sys.stderr = DummyOutput()
def __exit__(self, *_):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
if __name__ == '__main__':
print 'Begin'
with suppress_output():
# Those two print statements have no effect
# but *import readline* prints an escape char
print 'Before importing'
import readline
print 'After importing'
# This one will be displayed
print 'End'
Wenn Sie diese Schnipsel in einem test.py
Skript ausführen, werden Sie in dem suppress_output
Kontext sehen, dass die print
Aussagen sind in der Tat unterdrückt, aber nicht die Flucht char.
$ python test.py |less
Begin
ESC[?1034hEnd
(END)
hier sind also meine zwei Fragen:
- Wie ist es möglich, dass dieses Escape-Zeichen durch zu bekommen?
- Wie man es unterdrückt?
Sieht aus wie das Modul will den Terminal-Status mit einer Escape-Sequenz ändern, aber das funktioniert nicht. Sie sollten nicht versuchen, das zu umgehen, sondern das stattdessen beheben. – wRAR
Ja, es gibt einen Workaround, der auf dem http://reinout.vanrees.org/weblog/2009/08/14/readline-invisible-character-hack.html basiert. Aber das hat meine erste Frage nicht beantwortet :) (und ich hatte Angst, dass das nicht sehr tragbar ist, aber ich könnte falsch liegen). – Alex
Ich vermute, dass Ihr Terminal und/oder terminfo DB dieses Problem verursachen. – wRAR