HOWTO · Python
在 Python 中暂停程序执行
本教程介绍了如何在 Python 中暂停程序。
本页内容
要暂停 Python 程序,请根据需要选择行为:使用 time.sleep() 延迟一段时间,使用 input() 等待控制台中的用户输入,或在一个线程等待而其他线程继续运行时使用 threading。Shell 暂停命令仅适用于 Windows 控制台,不具备跨平台兼容性。
使用 time.sleep() 暂停固定时长
导入 time 模块并调用 time.sleep(seconds),即可让调用该函数的线程暂停指定时长,时长以秒为单位。等待结束后,程序会继续执行下一条语句。
运行以下示例:
本节中的代码以及显示的标签或输出仍为英文。
import time
print("Starting a short pause.")
time.sleep(0.1)
print("The program continues.")
请求的时长并不代表精确的计时保证。操作系统可能会在指定时长之后才恢复该线程,因此应将此函数用于延迟,而不是精确调度。线程休眠时无法执行自身的工作,但其他线程仍可运行。
使用 input() 等待用户输入
当控制台程序需要等待用户时,可以使用 input()。它会显示可选提示、读取一行内容,并返回用户输入的文本。如果只需任何响应(例如按下 Enter 键)即可继续,调用它时不赋值接收返回值也很有用。下面的示例会处理输入结束的情况,因此即使在没有交互式控制台的环境中运行,也能正常结束。
本节中的代码以及显示的标签或输出仍为英文。
try:
input("Press Enter to continue: ")
except EOFError:
pass
如果程序需要使用用户的回答,请保存返回的字符串,并在程序中使用它。这个示例也会处理输入结束的情况;当输入被重定向或没有可用的控制台输入时,就可能发生这种情况。
try:
name = input("Your name: ")
except EOFError:
name = "guest"
print(f"Hello, {name}.")
input() 会等待一行控制台输入;它并不是暂停后台服务或图形应用程序事件循环的通用方法。
建立可重复使用的定时暂停函数
如果需要重复延迟,可以将调用放进一个小型辅助函数中。在同一个脚本中导入 time,并在每次调用时传入所需的秒数。
本节中的代码以及显示的标签或输出仍为英文。
import time
def pause_for(seconds):
time.sleep(seconds)
pause_for(0.1)
print("Ready.")
这个辅助函数让调用位置保持简洁,同时保留 time.sleep() 的行为:暂停调用它的线程。只有当外围程序需要这些策略时,才添加参数验证或日志记录。
暂停一个线程,同时让其他工作继续
在工作函数中休眠只会暂停该工作线程,不会暂停进程中的所有线程。延迟期间,主线程仍可执行其他工作。随后调用 join() 会等待该工作线程结束;它本身不会暂停整个进程,也不会停止其他无关线程。
本节中的代码以及显示的标签或输出仍为英文。
import threading
import time
def worker():
time.sleep(0.1)
print("Worker finished.")
thread = threading.Thread(target=worker)
thread.start()
print("Main thread continues.")
thread.join()
print("Worker has been joined.")
当程序的另一部分需要等待工作完成时,应使用线程协调机制。如果需要无限期等待协调信号,请使用事件等同步原语,而不是随意设置很长的休眠时间;休眠只能在选定的延迟结束后再次检查。
仅在 Windows 控制台中使用 os.system(“pause”)
在 Windows 上,os.system("pause") 会要求命令处理程序运行其 pause 命令。它依赖 Windows 控制台和外部 Shell,因此不适合作为可移植的 Python 暂停方式;如果没有连接控制台,行为也可能与预期不同。需要控制台提示时,优先使用 input();需要协调工作时,则使用 threading 同步原语。此平台专用调用以行内形式展示,因为它无法在所有环境中运行。
选择合适的暂停方式
- 当程序需要延迟已知时长时,使用
time.sleep(seconds)。 - 当需要由用户决定控制台程序何时继续时,使用
input()。 - 当一个线程需要等待另一个线程或信号时,使用
threading同步机制。 - 只有在 Windows 控制台脚本明确需要该 Shell 命令时,才使用
os.system("pause")。
这些方式暂停的对象各不相同:定时延迟会暂停调用它的线程,控制台输入会等待用户输入一行内容,而同步机制会等待并发程序的另一部分。请根据需要恢复执行的对象,以及程序是否必须跨平台运行,选择合适的方式。