如何退出正在运行的Python程序到Python提示符?

4 投票
3 回答
3686 浏览
提问于 2025-04-16 04:17

我写了一个康威生命游戏的实现。我设置了两种模式,一种是自动模式,另一种是手动模式,意思是输出游戏结果的方式。在自动模式下,我无法停止正在运行的程序,只能通过按 ctrl + qctrl + c 来停止(这会打印出错误信息)。那么有没有什么方法可以让我通过按自己定义的某个键,比如 ctrl + k,来停止运行的程序并返回到 Python 的 >>> 提示符呢?谢谢。

3 个回答

1

你是在一个交互式的命令行里运行这个程序,想要返回到命令行吗?还是说你是在一个终端里运行,想要进入Python的提示符,同时保留当前程序的执行状态呢?

如果是后者,你可以在代码里使用键盘中断异常,这样就能跳转到Python调试器(pdb)了。

import pdb
try:
    mainProgramLoop()
except (KeyboardInterrupt, SystemExit):
    pdb.set_trace()
1

只要你能捕捉到按键事件,并调用一个特定的函数,你就可以这样做:

def prompt():
  import code
  code.interact(local=locals())

或者如果你使用的是IPython:

def prompt():
  from IPython.Shell import IPShellEmbed
  ipshell = IPShellEmbed()
  ipshell(local_ns=locals())

这样会打开一个Python或IPython的命令行界面,在这里你可以访问当前的环境。

祝好,Andrea

3

你不能随便使用任意的按键,但要处理正常的中断(比如按下控制键加C)而不出错,你只需要捕捉到它引发的KeyboardInterrupt异常,也就是说,只需把你的循环代码包裹在

try:
    functionthatloopsalot()
except KeyboardInterrupt:
    """user wants control back"""

中。要“重新获得控制权”回到交互式提示符,脚本必须使用-i(表示“交互式”)运行,或者使用更高级的交互式Python环境,比如ipython。

撰写回答