我在Python中创建了一个科学实验室,用户可以在其中创建,修改和分析各种对象。我想在程序中放置一个Python shell,因此用户可以通过shell操作对象。 (注意:他也可以通过常用的GUI操作对象。)
一个说明这个的模型: http://cool-rr.com/physicsthing/physicsthing_mockup_thumb.gif
我怎样才能做出这类事情?
我考虑过使用eval
,但我知道eval
无法处理import
,例如。
答案 0 :(得分:15)
您正在寻找code - Interpreter base classes,特别是code.interact()。
答案 1 :(得分:10)
根据您的GUI框架,它可能已经完成:
spyder
)以下是我将PyCrust嵌入到应用程序中所做的工作:
import wx.py.crust
...
...
# then call
crustFrame = wx.py.crust.CrustFrame(parent = self)
crustFrame.Show()
此处self
指的是我的主框架(源自wx.Frame
)。这将创建一个在您的应用程序中运行的PyCrust窗口,允许您检查存储在主框架中的所有内容(由于self
)。
答案 2 :(得分:3)
Python eval()
函数只处理表达式。您可能需要考虑exec
语句,它可以运行任意Python代码。
答案 3 :(得分:3)
FWIW,我相信Enthought已经编写了类似这样的东西,用于基于Python(和基于NumPy)的可视化套件。两年前我看过一个演示,它确实让你直接通过GUI或Python解释器来操作对象。
另外,要添加第一个答案,您可能必须将code.InteractiveConsole子类化为覆盖self.read()和self.write(),以便它们与GUI交互。而且你还必须将sys.stdout和sys.stderr重定向到写入同一控制台的可写类。
答案 4 :(得分:0)
我使用pdb.set_trace()作为shell。它还具有一些调试功能:)