J'utilise raw_input
en Python pour interagir avec l'utilisateur dans shell. Cela fonctionne comme prévu, mais l'utilisateur doit appuyer sur Entrée dans le shell après avoir appuyé sur 's'. Existe-t-il un moyen d'accomplir ce dont j'ai besoin à partir d'une entrée utilisateur sans avoir à appuyer sur Entrée dans le shell? J'utilise des machines * nixes.raw_input en python sans appuyer sur enter
Répondre
Sous Windows, vous avez besoin du module msvcrt
, plus précisément, il semble de la façon dont vous décrivez votre problème, la fonction msvcrt.getch:
Lire un keypress et retourner le caractère résultant. Rien n'est renvoyé à la console. Cet appel bloquera si une touche n'est pas déjà disponible, mais n'attendra pas pour entrer à appuyer.
(etc - voir les documents que je viens de pointer). Pour Unix, voir par ex. this recipe pour un moyen simple de construire une fonction similaire getch
(voir aussi plusieurs alternatives & c dans le fil de commentaire de cette recette).
Cela fonctionne comme prévu, et avoir une solution multiplateforme est super. Merci de répondre! –
@Somebody, vous êtes les bienvenus! –
Aller directement à https://pypi.python.org/pypi/readchar, semble faire la plupart de cela, même si je ne peux pas l'obtenir pour lire correctement les touches fléchées sur OSX. – boxed
Python ne fournit pas une solution multiplateforme hors de la boîte.
Si vous êtes sous Windows, vous pouvez essayer msvcrt avec:
import msvcrt
print 'Press s or n to continue:\n'
input_char = msvcrt.getch()
if input_char.upper() == 'S':
print 'YES'
J'ai trouvé ce module, mais j'en ai besoin pour travailler sur * nixes. Merci quand même! –
au lieu du module msvcrt
vous pouvez également utiliser WConio:
>>> import WConio
>>> ans = WConio.getkey()
>>> ans
'y'
Sur une note de côté, msvcrt.kbhit() retourne une Valeur booléenne déterminant si une touche du clavier est en cours de pressage. Donc, si vous faites un jeu ou quelque chose et que vous voulez que les touches fassent des choses mais n'arrêtent pas complètement le jeu, vous pouvez utiliser kbhit() dans une instruction if pour vous assurer que la clé n'est récupérée que veut faire quelque chose.
Un exemple en Python 3:
# this would be in some kind of check_input function
if msvcrt.kbhit():
key = msvcrt.getch().decode("utf-8").lower() # getch() returns bytes data that we need to decode in order to read properly. i also forced lowercase which is optional but recommended
if key == "w": # here 'w' is used as an example
# do stuff
elif key == "a":
# do other stuff
elif key == "j":
# you get the point
Pour obtenir un seul caractère, j'ai utilisé getch, mais je ne sais pas si cela fonctionne sur Windows.
malédictions peuvent faire aussi bien:
import curses, time #-------------------------------------- def input_char(message): try: win = curses.initscr() win.addstr(0, 0, message) while True: ch = win.getch() if ch in range(32, 127): break time.sleep(0.05) except: raise finally: curses.endwin() return chr(ch) #-------------------------------------- c = input_char('Press s or n to continue:') if c.upper() == 'S': print 'YES'
[http://stackoverflow.com/questions/292095/polling-the-keyboard-in-python](http://stackoverflow .com/questions/292095/polling-the-keyboard-in-python) –
Voir cette page. Il utilise le module ttyl et ne comporte que deux lignes. il suffit d'omettre la commande ord(): http://stackoverflow.com/questions/575650/how-to-obtain-the-keycodes-in-python – incognick