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.
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.
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