Для чтения по символьно из консоли я использую следующий код.
cli.py
import sys
class _Getch:
"""Gets a single character from standard input. Does not echo to the screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()
def __call__(self):
ch = self.impl()
if ord(ch) == 127:
ch = '\x08'
sys.stdout.write('\x08\x20')
return ch
class _GetchUnix:
def __init__(self):
import tty, sys
self.text = ''
self.rch = ''
def __call__(self):
import sys, tty, termios, select
fd = sys.stdin.fileno()
fout = sys.stdout.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch()
getch = _Getch()
#!/usr/bin/python
#coding:utf-8
from cli import getch
import sys
while True:
ch = getch.__call__()
sys.stdout.write(ch)
if ord(ch) == 90: break
Но есть одна проблема. При вводе строки превышающей длину терминала, курсор переводится на следующую строку, это нормально. Но при удалении символа backspace'ом дойдя до начала строки, не переходит на предыдущую строку. И это понятно, потому как я здесь использую управляющий код ‘\x08’ “возврат на один символ назад”.
Вопрос в том, как можно переносить курсор на предыдущую строку?
Пробовал на Python 2.6.5 в Ubuntu