8
votes

Python Readline Module Imprime le caractère d'échappement pendant l'importation

J'utilise le module readline code> avec Python 2.7.3 avec Fedora 17. Je n'ai pas ce problème avec Ubuntu 12.10.

pendant Importer readline code>, un Échapper Char est affiché. P>

$ python test.py |less
Begin
ESC[?1034hEnd
(END)


6 commentaires

On dirait que le module veut changer l'état du terminal avec une séquence d'évacuation mais cela ne fonctionne pas. Vous ne devriez pas essayer de contourner cela, fixez-le à la place.


Oui, il y a une solution de contournement basée sur cela ici ici ReinOut.vanrees.org/weblog/2009/08/14/... . Mais cela n'a pas répondu à ma première question :) (et j'avais peur que ce n'était pas très portable, mais je me trompe).


Je soupçonne que votre terminal et / ou TerminFo DB provoquent ce problème.


Je pense que le descripteur de fichier pour stdout est toujours 1. Vous pouvez donc y accéder directement avec le système d'exploitation.


J'ai ce problème lorsque SSH-ing à une machine à redhat de mon MacBook et Term = xterm-256Color . Je crois que c'est un bogue de configuration Lisline. Le mieux que je puisse faire pour l'instant est de travailler autour de celui-ci avec export term = vt100 .


Bug de python associé bugs.python.org/issue19884


3 Réponses :


0
votes

Pour répondre à la première question: changer sys.stdout n'affecte pas le fichier STDOUT'S Le descripteur de fichiers pointe vers , mais à la place quel objet de fichier de haut niveau Python considère comme étant stdout. Dit une autre manière, la modification de sys.stdout affecte votre code Python, mais pas (généralement) toutes les extensions compilées que vous pouvez utiliser (comme le module de lecture en lecture). Tout cela s'applique à sys.s.s.s.s.stderr aussi.

Pour répondre au second: vous pouvez faire ce que Cette réponse suggère (qui devrait être simple à porter à Python). Bien que les suggestions dans les commentaires sonnent comme une meilleure façon d'aller.



0
votes

J'ai utilisé le piratage suivant, avant d'importer readline xxx


2 commentaires

Le problème apparaît également avec xterm-256Couleur


mais régler os.environ [terme '] =' ' puis importer readline puis restaurer os.environ [terme] retour à Ce qu'il était avant d'éviter l'impression de la séquence d'évacuation (pas sûr d'autres fonctionnalités de readline si ...)



1
votes

Voici ce que j'utilise (certes basé sur la réponse de @jypeter), effacer la variable d'environnement code> à terme code> si la sortie ne passe pas à une TTY (par exemple, est redirigé vers un Fichier):

if not sys.stdout.isatty():

    # remember the original setting
    oldTerm = os.environ['TERM']

    os.environ['TERM'] = ''

    import readline

    # restore the orignal TERM setting
    os.environ['TERM'] = oldTerm

    del oldTerm


0 commentaires