2016-12-13 2 views
0

J'essaie de remplacer le texte imprimé sur une ligne par un autre. Pour cela, j'ai utilisé les codes d'échappement ANSI. Mon problème est lorsque la ligne à remplacer n'est plus visible sur l'écran (mais encore visible en faisant défiler la fenêtre) Je ne semble plus pouvoir la modifier. Voici un exemple simple autonome de mon problème:Impression Python sur des lignes qui ne sont plus visibles sur le terminal avec les codes d'échappement ANSI

import os 

nb_lines_term = int(os.popen('stty size', 'r').read().split()[0]) 

tot_lines = nb_lines_term + 5 
for i in range(tot_lines): 
    print 'line', tot_lines - i 

line_to_replace = nb_lines_term + 2 
new_str = "\033[F" * line_to_replace # go u 
new_str += 'replacing line ' + str(line_to_replace) 
new_str += "\033[E" * (line_to_replace - 1) # go back down 
print new_str 

est-il un moyen d'accéder à la ligne encore? par codes d'échappement ANSI ou toute autre méthode?

+1

Notez que vous devriez probablement utiliser ['curses'] (https://docs.python.org/2/library/curses.html) (' tigetstr() 'et amis) pour cela. Les séquences de contrôle sont spécifiques au terminal (par exemple 'CSI F' est la touche" End "dans le classique xterm). Sous Linux, 'CSI F' déplace le curseur d'un niveau et vous écrasez les caractères dans le tampon du terminal ... il n'y a plus de ligne à restaurer – dhke

Répondre

1

courte: non

plus: par convention, une fois que les données ont quitté l'écran visible, émulateurs peut laisser les données qui ont défilé hors de la vue dans lecture seule zone scrollback. Cela reflète l'adaptation des terminaux matériels aux émulateurs. Il y avait très peu de terminaux matériels prévus pour effectuer des panoramiques dans une région plus large (et quelques-uns permettaient de voir des données qui avaient défilé hors de vue). Donc, ce qui était standardisé ne permettait pas ce type de fonctionnalité, car les séquences de contrôle existantes traitaient de l'écran visible.

Il y a bien sûr des exceptions (Hewlett Packard a fait des terminaux intéressants, pour lesquels vous ne pouvez pas trouver d'émulateur). xterm (et certains qui ont copié la fonctionnalité) vous permet de effacer le scrollback. Mais il est peu probable que vous trouviez quelque chose qui vous permette (sous le contrôle du programme) de revenir en arrière et de modifier la zone de défilement. Les développeurs d'applications gèrent les lignes d'affichage et d'écriture visibles en utilisant leurs propres données plutôt que de se fier au terminal pour fournir ces informations hors visibilité.

+0

Merci ... c'est ce dont j'avais peur! –