0

用户在 Java GUI python-editor 中输入 python 脚本,并且可以从编辑器中运行它。有没有办法获取用户的脚本并对整个脚本施加时间限制?

我熟悉如何使用函数/signal.alarm(但我在 windows 和 unix Jython 上)但我想出的唯一解决方案是将该脚本放在另一个脚本中的方法中,我使用 setTrace () 函数,但它删除了其中全局变量的值持续存在的“特征”。IE。

try:
 i+=1
except NameError:
 i=0

每次执行时,'i' 的值都会增加 1。

4

2 回答 2

4

使用threading.Timer在指定的延迟(程序所需的最大持续时间)后在单独的线程中运行函数,并在该函数中使用thread.interrupt_main(注意它在 module 中thread而不是在 module 中threading!)引发 KeyboardInterrupt 异常主线程。

一种更可靠的方法(如果脚本被嵌入到一些不可中断的非 Python 代码中,这样它就会忽略键盘中断)是在需要时生成一个“看门狗进程”来非常有力地杀死错误的脚本(这样做是以及上述方法,并且比您在上面使用的延迟稍晚一点,以便脚本有机会运行其析构函数、atexit 函数等,如果可行的话)。

于 2009-10-22T23:31:00.300 回答
0

这只是一个猜测,但也许用线程或多处理来包装它?有一个计时器线程,当它超时时会杀死它。

于 2009-10-22T22:08:03.493 回答