暂停Python程序的正确方法


161

我一直在使用该input功能来暂停脚本

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

有正式的方法吗?


2
在调试器中工作并使用断点?
gddc 2012年

5
我是一个初学者,但是根据docs.python.org/2/library/functions.html#inputinput(prompt)它等效于eval(raw_input(prompt))。那可能不是您想要的。
user100464

2
@ user100464:如果使用的是Python 3,就可以了;input在Py3中与在Py2中相同raw_input。如果是Py3,则可以使用它们,但如果从未使用过,则无需分配返回值。
ShadowRanger

Answers:


218

对我来说似乎很好(或raw_input()在Python 2.X中)。或者,time.sleep()如果您想暂停一定的秒数,则可以使用。

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

1
我知道时间模块中的睡眠功能,但是如果我想让用户阅读一长段文本,该怎么办?
RandomPhobia 2012年

7
只需使用print来显示长文本块,然后显示input()raw_input('Press <ENTER> to continue')根据您的Python版本进行显示。
mhawke'7

8
对于较长的文本块,最好使用input()(或raw_input()在Python 2.x上)提示用户,而不是延迟时间。快速的阅读器不想等待延迟,慢速的阅读器可能希望在延迟上花费更多的时间,某人在阅读该延迟时可能会被打扰,并且需要更多的时间,依此类推。此外,如果某人经常使用该程序,他/她可能已经习惯了它的工作原理,甚至不需要阅读冗长的文字。让用户控制将文本块显示多长时间以供阅读,这是更友好的做法。
steveha 2012年

31

仅适用于Windows

import os
os.system("pause")

23
这是特定于Windows的,而所有现有答案都是与平台无关的。
lvc 2015年


18

因此,我发现这在我的编码工作中非常有效。我只是程序的开头创建了一个函数

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


8

我有一个类似的问题,我正在使用信号:

import signal

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

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

因此,您为信号SIGINT注册了一个处理程序,并暂停等待任何信号。现在,从程序外部(例如,在bash中),您可以运行kill -2 <python_pid>,它将向您的python程序发送信号2(即SIGINT)。您的程序将调用您的注册处理程序并继续运行。


1
请注意,这不能跨平台移植,例如。在Windows上没有signal.pause
kyrill

8

我在python2和3中使用以下命令来暂停代码执行,直到用户按下ENTER

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

6

很简单:

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

我已经使用了这种方法,但是我也喜欢将其用作pause()函数,并且我认为不需要exit()。def pause():返回raw_input(“按Enter键继续...”)
jacktrader

NameError: name 'raw_input' is not defined
bers


5

正如mhawkesteveha的评论所指出的那样,对该确切问题的最佳答案将是:

对于较长的文本块,最好使用input('Press <ENTER> to continue')(或raw_input('Press <ENTER> to continue')在Python 2.x上)提示用户,而不是延迟时间。快速的阅读器不想等待延迟,慢速的阅读器可能希望在延迟上花费更多的时间,某人在阅读该延迟时可能会被打扰,并且需要更多的时间,依此类推。此外,如果某人经常使用该程序,他/她可能已经习惯了它的工作原理,甚至不需要阅读冗长的文字。让用户控制将文本块显示多长时间以供阅读,这是更友好的做法。


0

我认为停止执行的最好方法是time.sleep()函数。如果仅在某些情况下需要暂停执行,则可以简单地实现以下if语句:

if somethinghappen:
    time.sleep(seconds)

您可以将else分支留空。


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只需在shell或cmd中编写以下代码即可安装模块:

pip install keyboard

-1

为了实现跨Python 2/3的兼容性,可以input通过以下six库使用:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.