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'
- 1. Lire des valeurs avec raw_input en Python
- 2. python problème d'entrée def raw_input
- 3. Python utilise raw_input avec une variable
- 4. Utilisation de l'entrée collectées à partir raw_input en Python
- 5. Python raw_input dans le dictionnaire déclaré dans une classe
- 6. en utilisant des malédictions avec raw_input en python
- 7. Comment convertir raw_input() en répertoire?
- 8. Lire l'entrée de raw_input() sans avoir l'invite écrasée par d'autres threads en Python
- 9. raw_input() est obsolète dans python 3.1?
- 10. raw_input sans laisser d'historique dans readline
- 11. appuyez sur le clavier sans appuyer sur le matériel
- 12. Sélectionnez plusieurs lignes sans appuyer sur la touche de commande
- 13. Activer Intellisense IPhone sans appuyer sur la touche Echap
- 14. MarkItUp! actualisation de l'aperçu continu sans appuyer sur Entrée
- 15. Ctrl-Espace dans Eclipse sans appuyer sur Ctrl-Espace
- 16. Différences entre `input` et` raw_input`
- 17. est-il possible de changer ce que l'utilisateur tape sans appuyer sur entrer? c'est un programme de console en C
- 18. J'ai un masque d'éditeur en flash qui affiche son mouvement sans appuyer sur la touche entrée
- 19. Comment simuler appuyer sur entrer en entrée de texte html avec Selenium?
- 20. Est-il possible d'afficher le bouton fléché sur UINavigationbar sans appuyer sur un contrôleur?
- 21. Validation WPF sur Enter Key Up
- 22. instruction if en python
- 23. Méthode crossplatform pour insérer du texte dans raw_input (pour éviter readine) en Python
- 24. obtenir la valeur appuyer sur la touche
- 25. Comment est-ce que je fais un menu qui n'exige pas que l'utilisateur appuie sur [enter] pour faire une sélection?
- 26. appuyer sur la touche ALT dans CMainFrame
- 27. Simulation CAPS LOCK appuyer sur Xlib
- 28. jquery contenteditable enter "Comment est-ce que je déclenche shift-enter quand quelqu'un appuie sur entrer?"
- 29. Récupération de Raw_Input à partir d'un script système exécuté
- 30. Afficher un bouton de retour UINavigationBar sans appuyer sur un contrôleur de vue
[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