[PYTHON] Confirmation Oui / Non sans avoir à appuyer sur ENTER

introduction

Parfois, vous souhaitez cocher Oui / Non lors de l'exécution d'un script. Si vous souhaitez supprimer quelque chose, ou si vous devez faire attention et ne voulez pas l'exécuter sans condition, vous voudrez le vérifier au cas où. Cependant, lors de l'utilisation, il devient gênant d'appuyer sur "Y" "ENTER" ou "N" "ENTER". Je me demande si "Y" et "N" ne suffisent pas. Et si vous voulez cocher Oui / Non sans appuyer sur "ENTER", vous pouvez le gérer en préparant une fonction comme celle-ci.

Exemple de code

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'

Je l'ai écrit en Python ici, mais si vous pouvez utiliser termios, vous pouvez écrire quelque chose de similaire.

Supplément

Dans l'exemple de code qui utilise termios en Python, il y a une description de fd = sys.stdin.fileno (), et après cela, vous pouvez voir que fd est utilisé. Mais je préfère utiliser sys.stdin. Je déteste écrire sys.stdin là où il semble que j'ai besoin d'un descripteur de fichier parce que cela me semble inconfortable, mais j'aime le raccourcir d'une ligne.

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

Toutes les fonctions de ce module prennent le descripteur de fichier fd comme premier argument. Cette valeur peut être un descripteur de fichier entier tel que celui renvoyé par sys.stdin.fileno (), ou un objet fichier tel que sys.stdin lui-même.

Recommended Posts

Confirmation Oui / Non sans avoir à appuyer sur ENTER