J'utilise le module pendant readline code> avec Python 2.7.3 avec Fedora 17. Je n'ai pas ce problème avec Ubuntu 12.10.
Importer readline code>, un Échapper Char est affiché. P>
$ python test.py |less
Begin
ESC[?1034hEnd
(END)
3 Réponses :
Pour répondre à la première question: changer 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. P> sys.stdout code> 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 code> 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 code> aussi. P>
J'ai utilisé le piratage suivant, avant d'importer readline
Le problème apparaît également avec xterm-256Couleur code>
mais régler os.environ [terme '] =' ' code> puis importer
readline code> puis restaurer
os.environ [terme] code> 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 code> si ...)
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
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 code>. 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 code>.
Bug de python associé bugs.python.org/issue19884