代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

在python程序中嵌入python shell

  •  11
  • Ram Rachum  · 技术社区  · 15 年前

    我正在用Python创建一个科学实验室,用户可以在其中创建、修改和分析各种对象。我想在程序中放置一个python shell,这样用户就可以通过shell操作对象。(注意:他还可以通过常规的GUI操作对象。)

    说明这一点的模型: http://cool-rr.com/physicsthing/physicsthing_mockup_thumb.gif

    我怎么做这种东西?

    我考虑过使用 eval 但是我明白 埃瓦 不能处理 import 例如。

    5 回复  |  直到 11 年前
        1
  •  10
  •   Eli Bendersky    13 年前

    根据您的GUI框架,可能已经完成了:

    • 对于wxpython,查找“pyscall”-它很容易嵌入到应用程序中
    • 对PyQt来说, pyqtshell ( 2011年4月29日更新: 这些天打电话来 spyder )

    以下是我在应用程序中嵌入Pyscult所做的:

    import wx.py.crust
    ...
    ...
    # then call
    
    crustFrame = wx.py.crust.CrustFrame(parent = self)
    crustFrame.Show()
    

    这个 self 这里指的是我的主框架(源自 wx.Frame )这将创建一个在应用程序中运行的pyscall窗口,并允许您检查主框架中存储的所有内容(因为 自己 )

        2
  •  15
  •   Van Gale    15 年前

    你在找 code - Interpreter base classes ,尤其是code.interact()。

    一些 examples from effbot .

        3
  •  3
  •   Greg Hewgill    15 年前

    蟒蛇 eval() 函数只处理表达式。你可以考虑 exec 语句,它可以运行任意的python代码。

        4
  •  3
  •   user95975    15 年前

    fwiw,我相信热情已经写了这样的东西,用于他们基于python(和numpy)的可视化套件。两年前我看到了一个演示,他们确实允许您通过GUI或Python解释器直接操作对象。

    此外,要添加到第一个答案中,您可能需要子类code.interactiveConsole来重写self.read()和self.write(),以便它们与GUI交互。您还必须将sys.stdout和sys.stderr重定向到一些可写类,这些类将写入同一控制台。

        5
  •  0
  •   Alexandre Kandalintsev    11 年前

    我使用pdb.set_trace()作为shell。它还具有一些调试功能:)