2016-04-14 1 views
0

Как моя программа Python может преобразовать ввод клавиатуры пользователя в верхний регистр, как если бы у пользователя был включен CAPS LOCK?python: преобразовать ввод в верхний регистр на экране при его вводе

Я хочу эмулировать программу, запущенную на компьютере, который не имеет строчных букв (то есть набор символов более ограничен, чем ASCII).

Ввод текста, введенный интерактивно пользователем на клавиатуре, должен быть принудительно применен к верхнему регистру в реальном времени, как будто это то, что пользователь набрал.

Интерфейс командной строки может использовать стандартную библиотеку cmd Python или что-то еще. Преобразование может быть выполнено с помощью пользовательского потока ввода или каким-либо другим способом.

Меня не интересует полная повторная реализация системы ввода символов по символу; например, я хотел бы продолжать использовать readline, если он доступен. Я только хочу перевести полученный поток, поскольку он визуально отображается и как он входит в программу.

Существует атрибут терминала Unix, OLCUC, который звучит многообещающе; но это marked LEGACY in the Single Unix Specification, и его реализация ненадежна (вызывает мусор для некоторых нормальных управляющих последовательностей или текста Unicode). Так что это не решение.

Особенно важно, чтобы интерфейс выглядел явно неотличимым от того, кто на самом деле печатает текст в верхнем регистре; на дисплее должен отображаться только пользовательский ввод в качестве текста верхнего регистра, который программа будет обрабатывать.

+0

Возможный дубликат [Python читает один символ от пользователя] (http://stackoverflow.com/questions/510357/python -read-a-single-character-from-the-user) – smac89

+0

Спасибо, но нет, я не хочу отвечать за повторное выполнение каждого аспекта ввода символов за символом. Я отредактировал вопрос, чтобы прояснить это. – bignose

ответ

1

Использование Геч: http://code.activestate.com/recipes/134892/

Append после stdin.read в __call__ Func следующее:

try: 
    tty.setraw(sys.stdin.fileno()) 
    ch = sys.stdin.read(1).upper() 
    sys.stdout.write(ch) 
    ... 

Вы можете просто сделать условное время (например, пока пользователь нажмет не входят), чтобы получить символ по полукокса и эхо его как верхний регистр:

getch = _Getch() 
text = '' 

while True: 
    char = getch() 
    if ord(char) == 13: # ascii carriage return 
     break 
    else: 
     text += char 

print text 
Смежные вопросы