我可以在用户中间暂停正在运行的python脚本(在Windows下),并在用户决定时再次恢复吗?
有一个主管理器程序生成,加载和运行其他python脚本(通过从控制台调用python script.py).我没有GUI,用户可以通过console进行交互.我希望我的主程序能够响应用户正在运行的脚本的暂停/恢复命令.我应该定义一个线程吗?方法是什么?
编辑/更新:
假设我有一个带有前端的小型python应用程序,它具有各种功能.我有一个RUN命令在后台运行python脚本.我想实现一个暂停正在运行的python脚本的PAUSE功能.当用户再次命令RUN时,python脚本应该恢复运行.使用raw_input()或print()强制用户发出命令.但在这种情况下,我们不知道用户何时想要中断/暂停/发出命令.因此通常的输入/打印不可用.
关于这一点有一些主题,但没有一个有令人满意的答案.
我有一个在IPython qt控制台中运行的python应用程序
http://ipython.org/ipython-doc/dev/interactive/qtconsole.html
当我遇到错误时,我希望能够在那时与代码进行交互.
try:
raise Exception()
except Exception as e:
try: # use exception trick to pick up the current frame
raise None
except:
frame = sys.exc_info()[2].tb_frame.f_back
namespace = frame.f_globals.copy()
namespace.update(frame.f_locals)
import IPython
IPython.embed_kernel(local_ns=namespace)
Run Code Online (Sandbox Code Playgroud)
我认为这会奏效,但我收到一个错误:
RuntimeError:线程只能启动一次
我尝试自定义配方sys.excepthook描述的行为.
在ipython中:
:import pdb, sys, traceback
:def info(type, value, tb):
: traceback.print_exception(type, value, tb)
: pdb.pm()
:sys.excepthook = info
:--
>>> x[10] = 5
-------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
NameError: name 'x' is not defined
>>>
Run Code Online (Sandbox Code Playgroud)
pdb.pm()没有被召唤.它似乎sys.excepthook = info在我的python 2.5安装中不起作用.