2016-04-14 5 views
0

Wie kann mein Python-Programm die Tastatureingabe des Benutzers in Großbuchstaben konvertieren, als ob der Benutzer CAPS LOCK aktiviert hat?Python: Konvertieren Eingabe in Großbuchstaben auf dem Bildschirm wie getippt

Ich möchte ein Programm emulieren, das auf einem Computer ausgeführt wird, der keine Kleinbuchstaben hat (d. H. Einen Zeichensatz, der begrenzter als ASCII ist).

Die Texteingabe, die interaktiv vom Benutzer an der Tastatur eingegeben wird, sollte in Echtzeit in Großbuchstaben geschrieben werden, als ob der Benutzer dies eingegeben hätte.

Die Befehlszeilenschnittstelle könnte Pythons Standardbibliothek cmd oder etwas anderes verwenden. Die Konvertierung könnte durch einen benutzerdefinierten Eingabestream oder auf andere Weise erfolgen.

Ich bin nicht daran interessiert, das Zeichen-für-Zeichen-Eingabesystem vollständig neu zu implementieren; zum Beispiel möchte ich readline weiter verwenden, wenn es verfügbar ist. Ich möchte nur den resultierenden Stream so übersetzen, wie er visuell erscheint und in das Programm kommt.

Es gibt ein Unix-Terminal-Attribut, OLCUC, das klingt vielversprechend; aber es ist marked LEGACY in the Single Unix Specification, und seine Implementierung ist unzuverlässig (verursacht Müll für einige normale Kontrollsequenzen oder Unicode-Text). Das ist also keine Lösung.

Besonders wichtig ist, dass das Interface sichtbar ununterscheidbar von jemandem sein sollte, der tatsächlich Großbuchstaben schreibt; Die Anzeige sollte immer nur die Eingabe des Benutzers als den Großbuchstaben-Text anzeigen, den das Programm verarbeiten wird.

+0

Mögliches Duplikat [Python ein einzelnes Zeichen vom Benutzer lesen] (http://stackoverflow.com/questions/510357/python -lesen-ein-einzelnes-Zeichen-vom-Benutzer) – smac89

+0

Danke, aber nein, ich möchte nicht dafür verantwortlich sein, jeden Aspekt der Zeichen-für-Zeichen-Eingabe erneut zu implementieren. Ich habe die Frage bearbeitet, um dies zu klären. – bignose

Antwort

1

Mit getch: http://code.activestate.com/recipes/134892/

Anfügen nach stdin.read in __call__ func wie folgt zusammen:

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

Sie können nur eine bedingte während tun (zB bis Drücken der Eingabetaste) char von char zu bekommen und es echo als Großbuchstaben an:

getch = _Getch() 
text = '' 

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

print text