Bonne façon de mettre en pause le programme Python


161

J'utilise la inputfonction pour suspendre mes scripts

print("something")
wait = input("PRESS ENTER TO CONTINUE.")
print("something")

existe-t-il un moyen formel de le faire?


2
Travailler dans un débogueur et utiliser des points d'arrêt?
gddc

Réponses:


219

Cela me semble bien (ou raw_input()en Python 2.X). Vous pouvez également l'utiliser time.sleep()si vous souhaitez faire une pause pendant un certain nombre de secondes.

import time
print("something")
time.sleep(5.5)    # pause 5.5 seconds
print("something")

1
Je connais la fonction de veille dans le module de temps, mais que faire si j'ai un long bloc de texte que je veux que l'utilisateur lise?
RandomPhobia

7
Utilisez simplement printpour afficher le long bloc de texte, puis input()ou raw_input('Press <ENTER> to continue')selon votre version de Python.
mhawke

8
Pour un long bloc de texte, il est préférable d'utiliser input()(ou raw_input()sur Python 2.x) pour inviter l'utilisateur, plutôt qu'un délai. Les lecteurs rapides ne voudront pas attendre un délai, les lecteurs lents voudront peut-être plus de temps sur le retard, quelqu'un pourrait être interrompu en le lisant et vouloir beaucoup plus de temps, etc. De plus, si quelqu'un utilise beaucoup le programme, il / elle peut s'habituer à son fonctionnement et n'a même pas besoin de lire le long texte. Il est plus simple de laisser l'utilisateur contrôler la durée d'affichage du bloc de texte pour la lecture.
steveha

30

Pour Windows uniquement, utilisez:

import os
os.system("pause")

23
Ceci est spécifique à Windows, alors que toutes les réponses existantes sont indépendantes de la plate-forme.
lvc


17

Donc, j'ai trouvé que cela fonctionnait très bien dans mes efforts de codage. J'ai simplement créé une fonction au tout début de mon programme,

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

et maintenant je peux utiliser la pause()fonction chaque fois que j'en ai besoin, comme si j'écrivais un fichier batch. Par exemple , dans un programme comme celui-ci:

import os
import system

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

print("Think about what you ate for dinner last night...")
pause()

Maintenant, évidemment, ce programme n'a aucun objectif et n'est qu'à titre d'exemple, mais vous pouvez comprendre précisément ce que je veux dire.

REMARQUE: pour Python 3, vous devrez utiliser inputpar opposition àraw_input


7

J'ai eu une question similaire et j'utilisais le signal:

import signal

def signal_handler(signal_number, frame):
    print "Proceed ..."

signal.signal(signal.SIGINT, signal_handler)
signal.pause()

Vous enregistrez donc un gestionnaire pour le signal SIGINT et faites une pause en attendant tout signal. Maintenant de l'extérieur de votre programme (par exemple dans bash), vous pouvez exécuter kill -2 <python_pid>, qui enverra le signal 2 (c'est-à-dire SIGINT) à votre programme python. Votre programme appellera votre gestionnaire enregistré et poursuivra son exécution.


2
Notez que ce n'est pas portable sur toutes les plates-formes, par exemple. sur Windows, il n'y a pas signal.pause.
kyrill

7

J'utilise ce qui suit pour python2 et 3 pour suspendre l'exécution du code jusqu'à ce que l'utilisateur appuie surENTER

import six
if six.PY2:
    raw_input("Press the <ENTER> key to continue...")
else:
    input("Press the <ENTER> key to continue...")

5

Comme le soulignent les commentaires de mhawke et steveha , la meilleure réponse à cette question exacte serait:

Pour un long bloc de texte, il est préférable d'utiliser input('Press <ENTER> to continue')(ou raw_input('Press <ENTER> to continue')sur Python 2.x) pour inviter l'utilisateur, plutôt qu'un délai. Les lecteurs rapides ne voudront pas attendre un délai, les lecteurs lents pourraient vouloir plus de temps sur le retard, quelqu'un pourrait être interrompu en le lisant et vouloir beaucoup plus de temps, etc. De plus, si quelqu'un utilise beaucoup le programme, il / elle peut s'habituer à son fonctionnement et n'a même pas besoin de lire le long texte. Il est plus simple de laisser l'utilisateur contrôler la durée d'affichage du bloc de texte pour la lecture.


5

Très simple:

raw_input("Press Enter to continue ...")
exit()

J'ai un peu utilisé cette méthode, mais j'aime aussi l'utiliser comme fonction pause () et je ne pense pas que exit () soit nécessaire. def pause (): return raw_input ("Appuyez sur Entrée pour continuer ...")
jacktrader

NameError: name 'raw_input' is not defined
bers


0

Je pense que la meilleure façon d'arrêter l'exécution est la fonction time.sleep (). si vous devez suspendre l'exécution uniquement dans certains cas, vous pouvez simplement implémenter une instruction if comme celle-ci:

if somethinghappen:
    time.sleep(seconds)

vous pouvez laisser la branche else vide.


0

Je pense que j'aime ce soln.

import getpass
getpass.getpass("Press Enter to Continue")

Il cache tout ce que l'utilisateur tape, ce qui aide à clarifier que l'entrée n'est pas utilisée ici.

Mais attention, dans la plate-forme OSX, il affiche une clé qui peut prêter à confusion.

Il montre une clé, comme je l'ai dit


La meilleure solution serait probablement de faire quelque chose de similaire au module getpass vous-même, sans faire d' read -sappel. Peut-être que la couleur fg correspond au bg?


0

Par cette méthode, vous pouvez reprendre votre programme simplement en appuyant sur n'importe quelle touche spécifiée que vous avez spécifié que:

import keyboard
while True:
    key = keyboard.read_key()
    if key == 'space':  # you can put any key you like instead of 'space'
        break

même méthode mais d'une autre manière:

import keyboard
while True:
    if keyboard.is_pressed('space'):  # same, you can put any key you like instead of 'space'
        break

Remarque: vous pouvez installer le keyboardmodule simplement en écrivant ceci dans votre shell ou cmd:

pip install keyboard

0
import os, sys

if sys.platform == 'win32':
    os.system('pause')
else:
    input('Press any key to continue...')

-1

Pour la compatibilité croisée Python 2/3, vous pouvez utiliser inputvia la sixbibliothèque:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.