2016-12-13 98 views
0

我嘗試用另一行替換給定行上打印的文本。爲此,我一直在使用ANSI轉義碼。 我的問題是何時被替換的行在屏幕上不再可見(但通過向上滾動窗口仍然可見),我似乎無法修改它了。 這裏是我的問題的一個簡單的獨立例如:Python打印行上不再可見的終端上使用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 

是否有仍然可以訪問行的方法嗎?通過ANSI轉義代碼或任何其他方法?

+1

請注意,您應該使用['curses'](https://docs.python.org/2/library/curses.html)('tigetstr()'和朋友)。控制序列是特定於終端的(例如'CSI F'是經典xterm中的「結束」密鑰)。在Linux上,'CSI F'將光標移動到某一級別,並且您正在覆蓋終端緩衝區中的字符......沒有線路可以恢復 – dhke

回答

1

短:沒有

長:按照慣例,一旦數據已經離開了可視屏幕,終端模擬器可以離開這只讀回溯地區的滾動的視線之外的數據。

這反映了硬件終端對仿真器的適應性。很少有硬件終端提供在更廣泛的區域進行平移(並且很少提供任何方式來查看滾動不見的數據)。所以標準化沒有提供這種功能,因爲現有的控制序列處理了可見的屏幕。

當然有例外(Hewlett Packard提出了一些有趣的終端,但您無法找到仿真器)。 xterm(以及一些複製該功能)可以讓你清除的回捲。但是你不太可能找到讓你(在程序控制下)回滾並修改回滾區域的東西。

應用程序開發人員管理可見顯示器,使用他們自己的數據編寫線路,而不是依賴終端提供那種不可見的信息。

+0

謝謝......這正是我所害怕的! –