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")。

这些方式暂停的对象各不相同:定时延迟会暂停调用它的线程,控制台输入会等待用户输入一行内容,而同步机制会等待并发程序的另一部分。请根据需要恢复执行的对象,以及程序是否必须跨平台运行,选择合适的方式。