web-dev-qa-db-fra.com

Python, appuyez sur n'importe quelle touche pour quitter

Donc, comme le titre le dit, je veux un code approprié pour fermer mon script python .. Jusqu'à présent, j'ai utilisé input('Press Any Key To Exit'), mais cela génère une erreur . J'aimerais un code qui ferme votre script sans utiliser d'erreur.

Est-ce que quelqu'un a une idée? Google me donne l'option d'entrée, mais je ne le veux pasIl se ferme en utilisant cette erreur:

Traceback (most recent call last):
  File "C:/Python27/test", line 1, in <module>
    input('Press Any Key To Exit')
  File "<string>", line 0

   ^
SyntaxError: unexpected EOF while parsing
14
Joppe De Cuyper

Avez-vous essayé raw_input()? Il se peut que vous obteniez une erreur de syntaxe en utilisant input() sur python 2.x, qui essaiera de eval quoi qu’il obtienne.

11
wim

Si vous êtes sur Windows, alors la commande cmd pause devrait fonctionner, même si elle lit "pressez n'importe quelle touche pour continuer"

import os
os.system('pause')

L’alternative Linux est read, une bonne description peut être trouvée ici

12
vikki

Un peu tard dans le jeu, mais j’ai écrit une bibliothèque il ya quelques années pour faire exactement cela. Il expose à la fois une fonction pause() avec un message personnalisable et la fonction plus générale getch() multiplate-forme inspirée par this answer .

Installez avec pip install py-getch et utilisez-le comme ceci:

from getch import pause
pause()

Ceci imprime 'Press any key to continue . . .' par défaut. Fournissez un message personnalisé avec:

pause('Press Any Key To Exit.')

Pour plus de commodité, il existe également une variante qui appelle sys.exit(status) en une seule étape:

pause_exit(0, 'Press Any Key To Exit.')

Vérifiez-le .

3
Joe

Je découragerais les fonctions spécifiques à la plate-forme en python si vous pouviez les éviter, mais vous pourriez utiliser le module msvcrt intégré.

from msvcrt import getch

junk = getch() # Assign to a variable just to suppress output. Blocks until key press.
3
LISTERINE

Ok, je suis sur Linux Mint 17.1 "Rebecca" et il me semble l'avoir compris. Comme vous le savez peut-être, Linux Mint est fourni avec Python, vous ne pouvez pas le mettre à jour ni installer une autre version par dessus. J'ai découvert que le python préinstallé dans Linux Mint est la version 2.7.6. Par conséquent, ce qui suit fonctionnera certainement avec la version 2.7.6. Si vous ajoutez raw_input('Press any key to exit'), aucun code d'erreur ne sera affiché, mais le programme se terminera avec le code 0. Par exemple, il s'agit de mon premier programme. MonPremierProgramme . N'oubliez pas que c'est mon premier programme et que je sais que c'est nul, mais c'est un bon exemple d'utilisation de "Appuyez sur n'importe quelle touche pour quitter" BTW C'est aussi mon premier article sur ce site Web, alors veuillez m'excuser si je l'ai formaté. faux.

0
DGxInfinitY

sous Windows:

if msvcrt.kbhit():
    if msvcrt.getch() == b'q':
        exit()
0
Thomas Lee

Voici un moyen de terminer en appuyant sur n’importe quelle touche sur * nix, sans afficher la touche et sans appuyer sur retour. (Le crédit de la méthode générale va à Python lit un seul caractère de l'utilisateur .) En fouillant SO, il semble que vous puissiez utiliser le module msvcrt pour dupliquer cette fonctionnalité sous Windows, mais je ne l'ai pas. installé n'importe où pour tester. Sur-commenté pour expliquer ce qui se passe ...

import sys, termios, tty

stdinFileDesc = sys.stdin.fileno() #store stdin's file descriptor
oldStdinTtyAttr = termios.tcgetattr(stdinFileDesc) #save stdin's tty attributes so I can reset it later

try:
    print 'Press any key to exit...'
    tty.setraw(stdinFileDesc) #set the input mode of stdin so that it gets added to char by char rather than line by line
    sys.stdin.read(1) #read 1 byte from stdin (indicating that a key has been pressed)
finally:
    termios.tcsetattr(stdinFileDesc, termios.TCSADRAIN, oldStdinTtyAttr) #reset stdin to its normal behavior
    print 'Goodbye!'
0
Matthew Adams