Modo corretto di mettere in pausa il programma Python


161

Ho usato la inputfunzione come un modo per mettere in pausa i miei script

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

c'è un modo formale per farlo?


2
Lavorare in un debugger e utilizzare i punti di interruzione?
gddc,

Risposte:


219

Mi sembra perfetto (o raw_input()in Python 2.X). In alternativa, è possibile utilizzare time.sleep()se si desidera mettere in pausa per un certo numero di secondi.

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

1
Conosco la funzione sleep nel modulo temporale ma cosa succede se ho un lungo blocco di testo che voglio che l'utente legga?
RandomPhobia,

7
Basta usare printper visualizzare il lungo blocco di testo e quindi input()o raw_input('Press <ENTER> to continue')come appropriato per la versione di Python.
mhawke,

8
Per un lungo blocco di testo, è meglio usare input()(o raw_input()su Python 2.x) per richiedere all'utente, piuttosto che un ritardo. I lettori veloci non vorranno aspettare un ritardo, i lettori lenti potrebbero volere più tempo sul ritardo, qualcuno potrebbe essere interrotto durante la lettura e volere molto più tempo, ecc. Inoltre, se qualcuno usa molto il programma, lui / può abituarsi a come funziona e non è nemmeno necessario leggere il lungo testo. È più semplice lasciare che l'utente controlli per quanto tempo il blocco di testo viene visualizzato per la lettura.
steveha,

30

Solo per Windows utilizzare:

import os
os.system("pause")

23
Questo è specifico di Windows, mentre tutte le risposte esistenti sono indipendenti dalla piattaforma.
PVC


17

Quindi, ho trovato che questo funziona molto bene nei miei sforzi di programmazione. Ho semplicemente creato una funzione all'inizio del mio programma,

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

e ora posso usare la pause()funzione ogni volta che ho bisogno proprio come se stessi scrivendo un file batch. Ad esempio , in un programma come questo:

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()

Ora ovviamente questo programma non ha obiettivi ed è solo a scopo di esempio, ma puoi capire esattamente cosa intendo.

NOTA: per Python 3, dovrai usare inputal contrarioraw_input


7

Ho avuto una domanda simile e stavo usando il segnale:

import signal

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

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

Quindi si registra un gestore per il segnale SIGINT e si mette in pausa in attesa di qualsiasi segnale. Ora dall'esterno del tuo programma (ad esempio in bash), puoi eseguire kill -2 <python_pid>, che invierà il segnale 2 (cioè SIGINT) al tuo programma Python. Il programma chiamerà il gestore registrato e proseguirà l'esecuzione.


2
Si noti che questo non è portatile su tutte le piattaforme, ad es. su Windows non esiste signal.pause.
kyrill,

7

Uso quanto segue per python2 e 3 per mettere in pausa l'esecuzione del codice fino a quando l'utente premeENTER

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

5

Come sottolineato dai commenti di mhawke e steveha , la migliore risposta a questa domanda esatta sarebbe:

Per un lungo blocco di testo, è meglio usare input('Press <ENTER> to continue')(o raw_input('Press <ENTER> to continue')su Python 2.x) per richiedere all'utente, piuttosto che un ritardo. I lettori veloci non vorranno aspettare un ritardo, i lettori lenti potrebbero volere più tempo sul ritardo, qualcuno potrebbe essere interrotto durante la lettura e volere molto più tempo, ecc. Inoltre, se qualcuno usa molto il programma, lui / può abituarsi a come funziona e non è nemmeno necessario leggere il lungo testo. È più semplice lasciare che l'utente controlli per quanto tempo il blocco di testo viene visualizzato per la lettura.


5

Molto semplice:

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

Ho usato un po 'questo metodo, tuttavia mi piace anche usarlo come funzione pause () e non penso che sia necessario exit (). def pause (): return raw_input ("Premi Invio per continuare ...")
jacktrader,

NameError: name 'raw_input' is not defined
bers


0

penso che il modo migliore per fermare l'esecuzione sia la funzione time.sleep (). se devi sospendere l'esecuzione solo in alcuni casi puoi semplicemente implementare un'istruzione if come questa:

if somethinghappen:
    time.sleep(seconds)

puoi lasciare vuoto il ramo else.


0

Penso che mi piace questo soln.

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

Nasconde qualunque cosa l'utente digiti, il che aiuta a chiarire che l'input non viene utilizzato qui.

Ma attenzione nella piattaforma OSX, mostra una chiave che può essere fonte di confusione.

Mostra una chiave, come ho detto


Probabilmente la soluzione migliore sarebbe quella di fare qualcosa di simile al modulo getpass da soli, senza effettuare una read -schiamata. Forse far corrispondere il colore fg al bg?


0

Con questo metodo, puoi riprendere il tuo programma semplicemente premendo qualsiasi tasto specificato che hai specificato che:

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

stesso metodo ma in un altro modo:

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

Nota: puoi installare il keyboardmodulo semplicemente scrivendolo nella tua shell o cmd:

pip install keyboard

0
import os, sys

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

-1

Per la compatibilità con Python 2/3, è possibile utilizzare inputtramite la sixlibreria:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.