[Une addition] version tty
Si vous utilisez normalement input () ou sys.stdin.read (),
Entrez les caractères
Appuyez sur Entrée
Deux étapes sont nécessaires.
Je veux que vous fassiez quelque chose au moment où vous appuyez sur la touche, sans appuyer sur Entrée. J'ai essayé de le trouver, mais je ne l'ai pas trouvé, alors j'ai pris note.
Vous pouvez vérifier le fonctionnement sur mac et ubuntu. Cela ne fonctionne pas sous Windows, mais il semble facile de faire la même chose avec le module msvcrt.
import sys
import termios
#Obtenir un descripteur de fichier d'entrée standard
fd = sys.stdin.fileno()
#Obtenez les attributs de terminal de fd
#La même chose est entrée dans l'ancien et le nouveau.
#Apportez des modifications au nouveau et adaptez-vous
#l'ancien doit être restauré plus tard
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
#new[3]Est-ce que lflags
#ICANON(Indicateur de mode canonique)Retirer
new[3] &= ~termios.ICANON
#ECHO(Drapeau pour afficher les caractères saisis)Retirer
new[3] &= ~termios.ECHO
try:
#Appliquer le nouveau réécrit à fd
termios.tcsetattr(fd, termios.TCSANOW, new)
#Recevez les entrées du clavier.
#Puisque lfalgs a été réécrit, vous pouvez passer au suivant sans appuyer sur Entrée. Ne fais pas écho
ch = sys.stdin.read(1)
finally:
#Restaurer les attributs de fd
#Plus précisément, ICANON et ECHO sont restaurés
termios.tcsetattr(fd, termios.TCSANOW, old)
print(ch)
En premier lieu, l'entrée et la sortie sont gérées à l'aide d'un identifiant appelé descripteur de fichier. http://qiita.com/toshihirock/items/78286fccf07dbe6df38f
En échangeant le descripteur de fichier entre le système d'exploitation et chaque programme, il est possible de se juger s'il s'agit d'une entrée / sortie standard, d'une sortie d'erreur ou d'une entrée / sortie d'un fichier.
termios Termios est le point de contact pour réellement échanger des données avec le système d'exploitation à l'aide du descripteur de fichier. termios a des informations sur la façon d'échanger des données entre le programme et le système d'exploitation. https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html
Parmi les informations, il y a aussi un drapeau (mode canonique, ICANON) qui décide s'il faut attendre l'entrée jusqu'à ce que l'entrée soit appuyée ou pour entrer dès que la touche est enfoncée. C'est une dimension que l'entrée clé peut être détectée en jouant avec elle.
À propos, dans l'exemple ci-dessus, l'indicateur (ECHO) qui décide d'afficher ou non les caractères saisis est également falsifié.
À propos des termios. Je connais aussi le mode canonique. https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html
termios en python http://docs.python.jp/2/library/termios.html#module-termios
Vous pouvez faire quelque chose de similaire à un niveau plus élevé que les termios appelés tty. Ou plutôt, celui-ci est plus facile. Uniquement disponible sous Unix. http://docs.python.jp/2/library/tty.html#module-tty
J'utilise tty pour créer un joli module http://code.activestate.com/recipes/134892/
Recommended Posts