Sto usando il modulo readline
con Python 2.7.3 con Fedora 17. Non ho questo problema con Ubuntu 12.10.Il modulo di lettura Python stampa il carattere di escape durante l'importazione
Durante il import readline
, viene visualizzato un carattere di escape.
$ python -c 'import readline' |less
ESC[?1034h(END)
Di solito quando ricevo uscita inatteso come questo, maneggiarlo con stdout/stderr
reindirizzamento a un descrittore di file fittizio (esempio qui sotto). Ma questa volta, questo metodo non funziona.
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'
Se si esegue questo frammento in uno script test.py
, si vedrà che all'interno del suppress_output
contesto, le dichiarazioni print
sono infatti soppressa, ma non il carattere di fuga.
$ python test.py |less
Begin
ESC[?1034hEnd
(END)
Così qui sono le mie due domande:
- Come è possibile che questo carattere di escape per arrivare fino in fondo?
- Come sopprimerlo?
Sembra che il modulo desideri modificare lo stato del terminale con una sequenza di escape ma che non funziona. Non dovresti cercare di aggirare il problema, risolvilo. – wRAR
Sì, c'è una soluzione basata su questo qui http://reinout.vanrees.org/weblog/2009/08/14/readline-invisible-character-hack.html. Ma questo non ha risposto alla mia prima domanda :) (e temevo che non fosse molto portabile, ma potrei sbagliarmi). – Alex
Sospetto che il tuo terminale e/o il DB terminfo causino questo problema. – wRAR