如何退出正在运行的Python程序到Python提示符?
我写了一个康威生命游戏的实现。我设置了两种模式,一种是自动模式,另一种是手动模式,意思是输出游戏结果的方式。在自动模式下,我无法停止正在运行的程序,只能通过按 ctrl + q 或 ctrl + 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。