2012-12-10 15 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

对不起,我没有正确阅读答案的第二部分。 –

相关问题