【发布时间】:2010-06-11 17:52:38
【问题描述】:
我有一个用 python 编写的应用程序。我想让我的用户能够通过允许他们运行自己的脚本来操作应用程序对象。他们很可能在脚本中出错。如果出现错误,我想确保应用程序不会停止运行。我想在我的应用中嵌入一个调试器来帮助他们调试脚本。
例如我在 shape.py 中的应用中定义了一个点类:
class QVPoint(object):
def __init__(self, x, y):
self.x = x
self.y = y
def addPoint(self, aPoint):
self.x = self.x + aPoint.x
self.y = self.y + aPoint.y
我想让他们运行如下脚本:
from shapes import QVPoint
a = QVPoint(1,1)
a.addPoint(QVPoint(2,2))
print "<" + str(a.x) + ',' + str(a.y) + ">"
print "<%d,%d>" % (a.x, a.y)
print 'done'
我认为这必须使用解释器、调试器,但我不确定有两个方面,1)如何将在应用程序中创建的对象公开给脚本,以及 2)如何确保应用程序不如果错误导致脚本停止,则停止。
我确定之前一定有人问过这个问题,但我找不到。欢迎所有答案。
谢谢
大卫
【问题讨论】:
-
请格式化您的代码。
-
只是为了澄清我想与脚本共享应用程序的状态。子流程将涉及设计一个协议来传达应用程序状态更改,并且会非常慢。在单独的线程上唯一可能需要的是调试器——尽管我可能能够使用远程调试器。
-
我认为我的解决方案是使用 try:except 包裹的 compile() 和 eval()。使用名为沙盒的空白模块的全局变量。
标签: python extensibility