在python中逐个字符地阅读时实现退格?

时间:2015-08-17 00:34:05

标签: python stdout backspace

如链接:http://code.activestate.com/recipes/134892/如何在stdout上实现退格?

2 个答案:

答案 0 :(得分:1)

'\b'是退格的转义序列。

>>> print('123xx\b\b45')
12345

答案 1 :(得分:0)

将每个字符一次写入sys.stdout应该有效。使用引用的getch(),您可以看到每次按键时返回的内容:

import sys
from getch import getch

while True:
    c = getch()
    print '%r' % c
    if c == 'q':
        break

在我的Linux系统上键入退格键,getch()实际上返回DEL个字符'\x7f'(尚不确定原因)。对于Python,这可以转换为\b'\x08')。

import sys
from getch import getch

translations = string.maketrans('\x7f', '\b')

while True:
    c = getch().translate(translations)
    sys.stdout.write(c)
    if c == 'q':
        break

可能使用termios模块处理字符翻译的方式更为优雅。

此外,如果您希望退格键清除以前输入的字符,则可以将'\x7f'翻译为'\b \b'