python - 沙盒/逐行运行 python 代码

标签 python dynamic programming-languages development-environment interpreter

我很想能够做这两个正在做的事情:

Inventing on principle @18:20 , Live ClojureScript Game Editor

如果你不想看视频,我的问题是:

假设我有这段代码:

....
xs = []
for x in xrange(10):
    xs.append(x)
...

我想创建一个环境,我可以在其中执行代码、语句语句并观察/跟踪局部变量/全局变量的变化。也许给它一个变量列表以在本地/全局字典中跟踪。比如单步执行代码和保存状态信息。

最理想的情况是,我想保存每个状态及其关联的上下文数据(本地/全局),这样我就可以验证谓词等。

我想做一些类似 Bret Victor 的 binarySearch 示例的事情 Inventing on principle @18:20

我说得有道理吗?我发现用文字解释起来很复杂,但视频展示了我想尝试的东西:)

谢谢你的时间


我尝试/阅读/谷歌搜索的内容:

我的下一步将研究 ast 并编译代码并一点一点地运行它,但我确实需要一些指导。我是否应该更多地研究反射和 检查-模块??

我用过 the Spin model checker以前,但它使用自己的 DSL,我只是喜欢用实现语言(在本例中为 Python)进行建模。

哦,顺便说一句,我知道沙盒代码的安全隐患,但我并没有尝试创建一个安全的执行环境,我正在尝试创建一个交互性很强的环境,例如针对粗略的模型检查或谓词断言.

最佳答案

在我的 initial success 之后使用 sys.settrace(),我最终切换到 the ast module (抽象语法树)。我解析我想要分析的代码,然后在每次赋值后插入新调用以报告变量名称及其新值。我还插入调用以报告循环迭代和函数调用。然后我执行修改后的树。

        tree = parse(source)

        visitor = TraceAssignments()
        new_tree = visitor.visit(tree)
        fix_missing_locations(new_tree)

        code = compile(new_tree, PSEUDO_FILENAME, 'exec')

        self.environment[CONTEXT_NAME] = builder
        exec code in self.environment

我正在开发像 Bret Victor 的实时编码工具,您可以看到我的工作代码 on GitHub ,以及它如何表现的一些例子 in the test .您还可以从 the project page 找到演示视频、教程和下载的链接。 .

关于python - 沙盒/逐行运行 python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670931/

相关文章:

Javascript:For 循环不起作用

javascript - 我想使用 javascript 更改 html div 的值

assembly - 汇编语言从一种架构到另一种架构是否不同?

c++ - 如何开始游戏开发?

php - PHP语言结果是C吗?

python - 如何让 py.test 识别子目录中的 conftest.py?

python - Pycharm 运行输出不显示在 ipython 控制台中,而是一个没有 ipython 的单独运行选项卡

python - Python中人脸识别的Face Anti-Spoofing方法

python - 为什么包含很少数据的 Python shelf 文件在 macOS 上这么大?

dynamic - 在 C# 中是否有等同于 `dynamic` 的 Rust?