Richtiger Weg, um das Python-Programm anzuhalten


161

Ich habe die inputFunktion verwendet, um meine Skripte anzuhalten

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

Gibt es einen formalen Weg, dies zu tun?


2
In einem Debugger arbeiten und Haltepunkte verwenden?
GDDC

Antworten:


219

Scheint mir raw_input()in Ordnung zu sein (oder in Python 2.X). Alternativ können Sie verwenden, time.sleep()wenn Sie eine bestimmte Anzahl von Sekunden pausieren möchten.

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

1
Ich kenne die Schlaffunktion im Zeitmodul, aber was ist, wenn ich einen langen Textblock habe, den der Benutzer lesen soll?
RandomPhobia

7
Verwenden Sie einfach print, um den langen Textblock anzuzeigen, und dann input()oder raw_input('Press <ENTER> to continue')entsprechend Ihrer Python-Version.
Mhawke

8
Für einen langen Textblock ist es am besten, input()(oder raw_input()Python 2.x) zu verwenden, um den Benutzer aufzufordern, anstatt eine Zeitverzögerung. Schnelle Leser möchten nicht auf eine Verzögerung warten, langsame Leser möchten möglicherweise mehr Zeit für die Verzögerung, jemand wird möglicherweise beim Lesen unterbrochen und möchte viel mehr Zeit usw. Auch wenn jemand das Programm häufig verwendet, kann er / sie Sie kann sich daran gewöhnen, wie es funktioniert, und muss nicht einmal den langen Text lesen. Es ist nur freundlicher, den Benutzer steuern zu lassen, wie lange der Textblock zum Lesen angezeigt wird.
Steveha

30

Für Windows nur verwenden:

import os
os.system("pause")

23
Dies ist Windows-spezifisch, während alle vorhandenen Antworten plattformunabhängig sind.
lvc


17

Ich fand, dass dies bei meinen Codierungsbemühungen sehr gut funktioniert. Ich habe einfach ganz am Anfang meines Programms eine Funktion erstellt.

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

und jetzt kann ich die pause()Funktion jederzeit verwenden , als ob ich eine Batch-Datei schreiben würde. Zum Beispiel in einem Programm wie diesem:

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

Natürlich hat dieses Programm kein Ziel und dient nur zum Beispiel, aber Sie können genau verstehen, was ich meine.

HINWEIS: Für Python 3 müssen Sie inputim Gegensatz zu verwendenraw_input


7

Ich hatte eine ähnliche Frage und benutzte das Signal:

import signal

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

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

Sie registrieren also einen Handler für das Signal SIGINT und halten inne und warten auf ein Signal. Jetzt können Sie von außerhalb Ihres Programms (z. B. in Bash) ausführen kill -2 <python_pid>, wodurch Signal 2 (dh SIGINT) an Ihr Python-Programm gesendet wird. Ihr Programm ruft Ihren registrierten Handler auf und fährt fort.


2
Beachten Sie, dass dies nicht plattformübergreifend portierbar ist, z. unter Windows gibt es keine signal.pause.
kyrill

7

Ich verwende das Folgende für python2 und 3, um die Codeausführung anzuhalten, bis der Benutzer drücktENTER

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

5

Wie in den Kommentaren von Mhawke und Steveha hervorgehoben , wäre die beste Antwort auf diese genaue Frage:

Für einen langen Textblock ist es am besten, input('Press <ENTER> to continue')(oder raw_input('Press <ENTER> to continue')Python 2.x) zu verwenden, um den Benutzer aufzufordern, anstatt eine Zeitverzögerung. Schnelle Leser möchten nicht auf eine Verzögerung warten, langsame Leser möchten möglicherweise mehr Zeit für die Verzögerung, jemand wird möglicherweise beim Lesen unterbrochen und möchte viel mehr Zeit usw. Auch wenn jemand das Programm häufig verwendet, kann er / sie Sie kann sich daran gewöhnen, wie es funktioniert, und muss nicht einmal den langen Text lesen. Es ist nur freundlicher, den Benutzer steuern zu lassen, wie lange der Textblock zum Lesen angezeigt wird.


5

Sehr einfach:

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

Ich habe diese Methode ein wenig verwendet, aber ich verwende sie auch gerne als pause () -Funktion, und ich glaube nicht, dass exit () erforderlich ist. def pause (): return raw_input ("Drücken Sie die Eingabetaste, um fortzufahren ...")
Jacktrader

NameError: name 'raw_input' is not defined
Bers


0

Ich denke, dass der beste Weg, um die Ausführung zu stoppen, die time.sleep () Funktion ist. Wenn Sie die Ausführung nur in bestimmten Fällen unterbrechen müssen, können Sie einfach eine if-Anweisung wie folgt implementieren:

if somethinghappen:
    time.sleep(seconds)

Sie können den Zweig else leer lassen.


0

Ich denke, ich mag diese Lösung.

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

Es verbirgt alles, was der Benutzer eingibt, um zu verdeutlichen, dass hier keine Eingabe verwendet wird.

Beachten Sie jedoch, dass auf der OSX-Plattform ein Schlüssel angezeigt wird, der möglicherweise verwirrend ist.

Es zeigt einen Schlüssel, wie ich sagte


Die wahrscheinlich beste Lösung wäre, etwas Ähnliches wie das getpass-Modul selbst zu tun, ohne einen read -sAnruf zu tätigen . Vielleicht passt die fg-Farbe zur bg?


0

Mit dieser Methode können Sie Ihr Programm fortsetzen, indem Sie eine der angegebenen Tasten drücken:

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

gleiche Methode, aber auf andere Weise:

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

Hinweis: Sie können das keyboardModul einfach installieren, indem Sie es in Ihre Shell oder cmd schreiben:

pip install keyboard

0
import os, sys

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

-1

Für die Cross Python 2/3 Kompatibilität können Sie inputüber die verwendensix Bibliothek:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.