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


161

Я використовував цю inputфункцію як спосіб призупинити свої сценарії

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

чи існує формальний спосіб зробити це?


2
Працювати в налагоджувачі і використовувати точки прориву?
gddc

Відповіді:


219

Мені здається чудово (або raw_input()в Python 2.X). Можна також скористатися, time.sleep()якщо ви хочете зробити паузу на певну кількість секунд.

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

1
Я знаю про функцію сну у часовому модулі, але що робити, якщо у мене довгий блок тексту, який я хочу, щоб користувач читав?
RandomPhobia

7
Просто використовуйте printдля відображення довгого блоку тексту, а потім input()або raw_input('Press <ENTER> to continue')відповідно до вашої версії Python.
mhawke

8
Для довгого блоку тексту найкраще використовувати input()(або raw_input()на Python 2.x) для спонукання користувача, а не затримку часу. Швидкі читачі не хочуть чекати затримки, повільні читачі можуть захотіти більше часу на затримку, хтось може перерватись під час її читання і захоче набагато більше часу тощо. Також, якщо хтось багато використовує програму, він / вона може звикнути до того, як це працює, і не потрібно навіть читати довгий текст. Це просто дружніше, щоб дозволити користувачеві контролювати, як довго блок тексту відображається для читання.
steveha

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


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
Зауважте, що це не портативно на платформах, наприклад. у Windows немає 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...")

5

Як вказували коментарі mhawke та steveha , найкращою відповіддю на це точне запитання буде:

Для довгого блоку тексту найкраще використовувати input('Press <ENTER> to continue')(або raw_input('Press <ENTER> to continue')на Python 2.x) для спонукання користувача, а не затримку часу. Швидкі читачі не хочуть чекати затримки, повільні читачі можуть захотіти більше часу на затримку, хтось може перерватись під час її читання і захоче набагато більше часу тощо. Також, якщо хтось багато використовує програму, він / вона може звикнути до того, як це працює, і не потрібно навіть читати довгий текст. Це просто дружніше, щоб дозволити користувачеві контролювати, як довго блок тексту відображається для читання.


5

Дуже просто:

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

Я трохи використовував цей метод, однак мені також подобається використовувати його як функцію pause (), і я не думаю, що в цьому немає потреби (). def pause (): повернути raw_input ("Натисніть Enter, щоб продовжити ...")
jacktrader

NameError: name 'raw_input' is not defined
BERS


0

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

if somethinghappen:
    time.sleep(seconds)

ви можете залишити іншу гілку порожньою.


0

Я думаю, що мені подобається цей соль.

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


-1

Для перехресної сумісності Python 2/3 ви можете використовувати inputчерез sixбібліотеку:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.