Correcte manier om een Python-programma te pauzeren

Ik heb de functie inputgebruikt om mijn scripts te pauzeren:

print("something")
wait = input("Press Enter to continue.")
print("something")

Is er een formele manier om dit te doen?


Antwoord 1, autoriteit 100%

Het lijkt me prima (of raw_input()in Python 2.X). U kunt ook time.sleep()gebruiken als u een bepaald aantal seconden wilt pauzeren.

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

Antwoord 2, autoriteit 15%

Alleen voor Windows, gebruik:

import os
os.system("pause")

Antwoord 3, autoriteit 8%

Dus ik merkte dat dit heel goed werkte bij mijn coderingsinspanningen. Ik heb gewoon een functie gemaakthelemaal aan het begin van mijn programma,

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

en nu kan ik de functie pause()gebruiken wanneer ik maar wil, net alsof ik een batchbestand aan het schrijven ben. Bijvoorbeeld, in een programma als dit:

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

Dit programma heeft natuurlijk geen doel en is slechts een voorbeeld, maar je kunt precies begrijpen wat ik bedoel.

OPMERKING: voor Python 3 moet je inputgebruiken in plaats van raw_input


Antwoord 4, autoriteit 7%

Ik neem aan dat je wilt pauzeren zonder invoer.

Gebruik:

time.sleep(seconds)


Antwoord 5, autoriteit 4%

Ik heb een soortgelijke vraag gehad en ik gebruikte signaal:

import signal
def signal_handler(signal_number, frame):
    print "Proceed ..."
signal.signal(signal.SIGINT, signal_handler)
signal.pause()

Dus je registreert een handler voor het sein SIGINT en wacht op een signaal. Nu kun je van buiten je programma (bijv. in bash), kill -2 <python_pid>uitvoeren, dat signaal 2 (d.w.z. SIGINT) naar je python-programma stuurt. Uw programma zal uw geregistreerde handler aanroepen en verder gaan.


Antwoord 6, autoriteit 3%

Ik gebruik het volgende voor Python 2 en Python 3 om de uitvoering van de code te pauzeren totdat de gebruiker op Enter

drukt

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

Antwoord 7, autoriteit 2%

Zoals aangegeven door mhawkeen steveha‘s opmerkingen, zou het beste antwoord op deze exacte vraag zijn:

Voor een lang tekstblok kunt u het beste input('Press <ENTER> to continue')(of raw_input('Press <ENTER> to continue')aan
Python 2.x) om de gebruiker te vragen, in plaats van een vertraging. Snelle lezers
willen niet wachten op een vertraging, trage lezers willen misschien meer tijd aan
de vertraging, kan iemand worden onderbroken tijdens het lezen en wil hij een
veel meer tijd, enz. Ook als iemand het programma veel gebruikt, zal hij/zij
kan wennen aan hoe het werkt en niet eens de lange hoeft te lezen
tekst. Het is gewoon vriendelijker om de gebruiker te laten bepalen hoe lang de blokkering is
tekst wordt weergegeven om te lezen.


Antwoord 8, autoriteit 2%

Print ("This is how you pause")
input()

Antwoord 9, autoriteit 2%

Heel eenvoudig:

raw_input("Press Enter to continue ...")
print("Doing something...")

Antwoord 10

Met deze methode kunt u uw programma hervatten door op een bepaalde toets te drukken die u heeft opgegeven:

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

Dezelfde methode, maar op een andere manier:

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

Opmerking: u kunt de module keyboardinstalleren door dit te schrijven in je shell of cmd:

pip install keyboard

Antwoord 11

platformoverschrijdende manier; werkt overal

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

Antwoord 12

Ik werk met niet-programmeurs die van een eenvoudige oplossing houden:

import code
code.interact(banner='Paused. Press ^D (Ctrl+D) to continue.', local=globals()) 

Dit levert een interpreter op die bijna precies hetzelfde werkt als de echte interpreter, inclusief de huidige context, met alleen de output:

Gepauzeerd. Druk op ^D (Ctrl+D) om door te gaan.
>>>

De Python Debuggeris ook een goede manier om te pauzeren.

p>

import pdb
pdb.set_trace() # Python 2

of

breakpoint() # Python 3

Antwoord 13

Ik denk dat de beste manier om de uitvoering te stoppen de functie time.sleep()is.

Als u de uitvoering alleen in bepaalde gevallen moet opschorten, kunt u eenvoudig een if-statement als volgt implementeren:

if somethinghappen:
    time.sleep(seconds)

Je kunt de tak elseleeg laten.


Antwoord 14

In Linux kun je kill -TSTP <pid>naar de achtergrond sturen en een proces stoppen. Het is er dus, maar het kost geen CPU-tijd.

Vervolgens, kill -CONT <pid>en het is uit en weer actief.


Antwoord 15

Ik denk dat ik deze oplossing leuk vind:

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

Het verbergt wat de gebruiker typt, wat helpt om te verduidelijken dat invoer hier niet wordt gebruikt.

Maar wees voorzichtig met het OS X-platform. Er wordt een sleutel weergegeven die verwarrend kan zijn.

Het toont een sleutel, zoals ik al zei


Waarschijnlijk zou de beste oplossing zijn om zelf iets te doen dat lijkt op de getpass-module, zonder een read -saanroep te doen. Misschien de voorgrondkleur laten overeenkomen met de achtergrond?


Antwoord 16

Voor cross Python 2/3 compatibiliteit kun je inputgebruiken via de sixbibliotheek:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )

Other episodes