我试图在Python-3.x中编写一个函数,它会提示用户从键盘输入字符。我希望所有字符都能正常回显,但最终换行符会终止输入。
除非输入退格,否则以下功能可以正确执行此操作。当用户键入退格键时,我希望屏幕上最右边的字符被删除,光标向左移动一个位置,就像在正常的终端输入模式下一样。
但是,我无法在此处正常工作。任何人都可以建议一种方法,以便在用户输入退格键时使此功能正常工作吗?
谢谢。
def read_until_newline(prompt=None):
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
if prompt:
sys.stdout.write(prompt)
sys.stdout.flush()
result = None
try:
while True:
try:
c = sys.stdin.read(1)
if c == '\n':
break
elif c == '^?' or c == '^H':
if result:
###
### How do I cause the rightmost
### character to be erased on the
### screen and the cursor to move
### one space to the left?
###
result = result[0:-1]
continue
sys.stdout.write(c)
sys.stdout.flush()
if result:
result += c
else:
result = c
except IOError:
pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
return result