2012-12-10 32 views
5

\b控制字符,按我的理解,不應該清除前面的字符(這將是\b +一個刪除字符也一樣),所以像這樣的工作: b字符的反義詞是什麼,即一種非刪除空間?

>>> print 'pototo\b\b\ba' 
potato 

是否有字符向前移動,就像一個非覆蓋空間?預期使用量會是這樣的(我叫這個人物\x):

>>> print 'pototo\r\x\x\xa' 
potato 

顯然打字機上的一個正常的空間將做到這一點就好了。但在終端上,一個空間會擦除下面的字母。

我的用例是一個pexpect匹配類型的場景,我想要回顧回去並用顏色裝飾字符流輸出的某些部分,我想知道是否保留整個當前的緩存內存中的行將是必要的或不。

+1

它看起來沒有任何方法可以在[python的「轉義序列標記」(http://docs.python.org/2/reference/lexical_analysis.html#grammar-token-escapeseq) ... –

+0

我不相信有這樣一個角色,至少一個詳盡的搜索沒有透露任何。但是,在linux下,你應該可以使用[curses模塊](http://docs.python.org/2/library/curses.html)顯式地設置光標位置。 – primo

回答

2

如果你可以在你的終端(*),你可以使用光標向前(CUF)序列依靠ANSI escape code sequences 「CSI ñ C」,像這樣:

print "Pototo\b\b\ba\x1b[2Ces" 

,並得到:

Potatoes 

CSI是\x1b[,用於啓動ANSI轉義碼序列。 2是向右移動的字符數,C是向右移動的命令。


(*)一個很好的近似值是您可以依賴ANSI代碼,除非您需要支持Windows。

+0

另一個用例:'print'Hello Tim \ b \ b \ bw \ x1b [2C,很棒的問題:) :) –

+0

不錯。 'print'pototo \ r \ x1b [3Ca「'似乎有效! – wim

0

你應該重新寫的字:

>>> print 'pototo\rpota' 
potato 

如果你不想重新寫出來,不是你應該使用一個庫像curses手動設置光標位置。

+0

這個問題是,你不能追加任何東西到單詞的末尾(沒有覆蓋)。 –

+0

@hayden我的觀點是命令行不是爲了允許這些複雜的情況而編寫的。你可以完全重寫一行(正如我的答案指出的那樣),但是嘗試做其他任何事情你都不會有可移植的代碼。如果你想做這樣的事情,我建議你使用'curses'或其他庫來進行終端操作。 – Bakuriu

+0

對不起,我沒有正確閱讀答案的第二部分。 –

相關問題