[PYTHON] Ja / Nein-Bestätigung ohne ENTER drücken zu müssen

Einführung

Manchmal möchten Sie beim Ausführen eines Skripts Ja / Nein aktivieren. Wenn Sie etwas löschen möchten oder wenn Sie vorsichtig sein müssen und es nicht bedingungslos ausführen möchten, möchten Sie es für alle Fälle überprüfen. Während des Betriebs wird es jedoch schwierig, "Y" "ENTER" oder "N" "ENTER" zu drücken. Ich frage mich, ob "Y" und "N" nicht genug sind. Und wenn Sie Ja / Nein aktivieren möchten, ohne "ENTER" zu drücken, können Sie dies tun, indem Sie eine Funktion wie diese vorbereiten.

Codebeispiel

import sys
import termios


def yesno():
    result = ''
    attribute = termios.tcgetattr(sys.stdin)
    temp = termios.tcgetattr(sys.stdin)
    temp[3] &= ~(termios.ICANON | termios.ECHO)
    termios.tcsetattr(sys.stdin, termios.TCSAFLUSH, temp)
    try:
        while True:
            char = sys.stdin.read(1)
            if char == 'y' or char == 'Y':
                result = 'Y'
                break
            elif char == 'n' or char == 'N':
                result = 'N'
                break
    except KeyboardInterrupt:
        result = '^C'
    termios.tcsetattr(sys.stdin, termios.TCSAFLUSH, attribute)
    return result


key = yesno()
# key: 'Y' or 'N' or '^C'

Ich habe es hier in Python geschrieben, aber wenn Sie Termios bedienen können, können Sie etwas Ähnliches schreiben.

Ergänzung

In dem Codebeispiel, das Termios in Python verwendet, gibt es eine Beschreibung von "fd = sys.stdin.fileno ()", und danach können Sie sehen, dass "fd" verwendet wird. Aber ich bevorzuge "sys.stdin". Ich hasse es, sys.stdin zu schreiben, wo es so aussieht, als ob ich einen Dateideskriptor brauche, weil es sich unangenehm anfühlt, aber ich mag es, ihn um eine Zeile zu kürzen.

https://docs.python.org/3/library/termios.html

All functions in this module take a file descriptor fd as their first argument. This can be an integer file descriptor, such as returned by sys.stdin.fileno(), or a file object, such as sys.stdin itself.

https://docs.python.org/ja/3/library/termios.html

Alle Funktionen in diesem Modul verwenden den Dateideskriptor fd als erstes Argument. Dieser Wert kann ein ganzzahliger Dateideskriptor sein, wie er von sys.stdin.fileno () zurückgegeben wird, oder ein Dateiobjekt wie sys.stdin selbst.

Recommended Posts

Ja / Nein-Bestätigung ohne ENTER drücken zu müssen