Правильный способ приостановить программу Python

161

Я использовал inputфункцию как способ приостановить свои сценарии

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

Есть ли формальный способ сделать это?

RandomPhobia
источник
2
Работать в отладчике и использовать точки останова?
GDCD

Ответы:

219

Кажется, хорошо для меня (или raw_input()в Python 2.X). В качестве альтернативы вы можете использовать, time.sleep()если вы хотите сделать паузу на определенное количество секунд.

import time
print("something")
time.sleep(5.5)    # pause 5.5 seconds
print("something")
mhawke
источник
1
Я знаю о функции сна в модуле времени, но что, если у меня есть длинный блок текста, который я хочу, чтобы пользователь прочитал?
RandomPhobia
7
Просто используйте printдля отображения длинного блока текста, а затем input()или raw_input('Press <ENTER> to continue')в зависимости от вашей версии Python.
Mhawke
8
Для длинного блока текста лучше использовать input()(или raw_input()на Python 2.x), чтобы подсказывать пользователю, а не задержку. Быстрые читатели не захотят ждать задержки, медленные читатели могут захотеть больше времени на задержку, кто-то может быть прерван во время чтения, и ему нужно гораздо больше времени и т. Д. Кроме того, если кто-то часто использует программу, он / она она может привыкнуть к тому, как это работает, и ей даже не нужно читать длинный текст. Просто удобнее позволить пользователю контролировать, как долго блок текста отображается для чтения.
стевеха
30

Для окон используйте только :

import os
os.system("pause")
Чан Циш
источник
23
Это зависит от Windows, в то время как все существующие ответы не зависят от платформы.
LVC
17

Так что я нашел, что это очень хорошо работает в моих усилиях по кодированию. Я просто создал функцию в самом начале моей программы,

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

и теперь я могу использовать эту pause()функцию всякий раз, когда мне нужно, как если бы я писал командный файл. Например , в такой программе:

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

Очевидно, что эта программа не имеет цели и предназначена только для примера, но вы можете точно понять, что я имею в виду.

ПРИМЕЧАНИЕ: для Python 3 вам нужно будет использовать inputвместоraw_input

Cether
источник
7

У меня был похожий вопрос, и я использовал сигнал:

import signal

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

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

Таким образом, вы регистрируете обработчик для сигнала SIGINT и приостанавливаете ожидание любого сигнала. Теперь из-за пределов вашей программы (например, в bash) вы можете запустить kill -2 <python_pid>, что отправит сигнал 2 (т.е. SIGINT) в вашу программу на python. Ваша программа вызовет ваш зарегистрированный обработчик и продолжит работу.

Олин
источник
2
Обратите внимание, что это не переносимо между платформами, например. на винде нет signal.pause.
Kyrill
7

Я использую следующее для python2 и 3, чтобы приостановить выполнение кода, пока пользователь не нажметENTER

import six
if six.PY2:
    raw_input("Press the <ENTER> key to continue...")
else:
    input("Press the <ENTER> key to continue...")
Adewole Adesola
источник
5

Как указано в комментариях Мхавке и Стивехи , лучшим ответом на этот точный вопрос будет:

Для длинного блока текста лучше использовать input('Press <ENTER> to continue')(или raw_input('Press <ENTER> to continue')на Python 2.x), чтобы подсказывать пользователю, а не задержку. Быстрые читатели не захотят ждать задержки, медленные читатели могут захотеть больше времени на задержку, кто-то может быть прерван во время чтения, и ему нужно гораздо больше времени и т. Д. Кроме того, если кто-то часто использует программу, он / она она может привыкнуть к тому, как это работает, и ей даже не нужно читать длинный текст. Просто удобнее позволить пользователю контролировать, как долго блок текста отображается для чтения.

NTG
источник
5

Очень просто:

raw_input("Press Enter to continue ...")
exit()
BuSaeed
источник
Я немного использовал этот метод, однако мне также нравится использовать его как функцию pause (), и я не думаю, что есть необходимость в exit (). def pause (): return raw_input («Нажмите Enter, чтобы продолжить ...»)
jacktrader
NameError: name 'raw_input' is not defined
BERS
0

я думаю, что лучший способ остановить выполнение - это функция time.sleep (). если вам нужно приостановить выполнение только в определенных случаях, вы можете просто реализовать оператор if следующим образом:

if somethinghappen:
    time.sleep(seconds)

Вы можете оставить ветку else пустой.

mbiella
источник
0

Я думаю, что мне нравится этот soln.

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

Он скрывает все, что вводит пользователь, что помогает уточнить, что ввод здесь не используется.

Но будьте внимательны на платформе OSX, она отображает ключ, который может сбить с толку.

Это показывает ключ, как я уже сказал


Вероятно, лучшим решением было бы сделать что-то похожее на модуль getpass, не совершая read -sвызова. Может быть, чтобы цвет fg соответствовал bg?

Сами Бенчериф
источник
0

С помощью этого метода вы можете возобновить свою программу, просто нажав любую указанную вами клавишу, которая:

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

тот же метод, но по-другому:

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

Примечание: вы можете установить keyboardмодуль просто написав это в вашей оболочке или cmd:

pip install keyboard
Neotod
источник
0
import os, sys

if sys.platform == 'win32':
    os.system('pause')
else:
    input('Press any key to continue...')
Муджиб Исак
источник
-1

Для кросс-совместимости с Python 2/3 вы можете использовать inputчерез sixбиблиотеку:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
BuvinJ
источник