当前位置: 首页 > 面试题库 >

沙箱/逐行运行python代码

吴城
2023-03-14
问题内容

我很希望能够做到这两个正在做的事情:

原则上发明@ 18:20, Live
ClojureScript游戏编辑器

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

说我有这段代码:

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

我想创建一个环境,在其中我可以执行代码,为语句声明并在本地/全局变量更改时对其进行监视/跟踪。也许给它一个变量列表,以便在本地/全局字典中跟踪。就像单步执行代码并保存状态信息一样。

我说得通吗 我觉得用文字解释很复杂,但是视频展示了我想尝试的方法:)

谢谢你的时间

我的下一步将是研究ast并编译代码并逐位运行它,但我确实需要一些指导。我是否应该更多地考虑反射和inspect-module?

我以前使用过Spin模型检查器,但它使用了自己的DSL,我只是喜欢用实现语言(在本例中为python)进行建模。

噢,顺便说一句,我了解沙盒代码的安全性,但我并不是在尝试创建一个安全的执行环境,而是在尝试创建一个非常交互式的环境,例如用于粗略模型检查或谓词声明。


问题答案:

在取得了最初的成功之后sys.settrace(),我最终切换到了ast模块(抽象语法树)。我解析要分析的代码,然后在每次分配后插入新的调用,以报告变量名称及其新值。我还插入调用以报告循环迭代和函数调用。然后我执行修改后的树。

        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’s这样的实时编码工具,并且您可以在GitHub上查看我的工作代码,以及有关其在测试中的行为的一些示例。您还可以从项目页面上找到演示视频,教程和下载的链接。



 类似资料:
  • 安全是Chromium最重要的目标之一。安全的关键在于理解下面这点:在我们完整地理解了系统在所有可能的输入组合下表现出的行为之后,我们才能够真的保证系统安全。对于像Chromium这样庞大而多样化的代码库,推理它的各个部分可能的行为的组合几乎是不可能的。沙箱的目标是提供这样一种保证:不论输入什么,保证一段代码最终能或不能做的事情。 沙盒利用操作系统提供的安全性,允许不能对计算机做出持久性改变或者访

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u'' >>> env.from_string("{{ func.fu

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u&"" title="jinja2.sandbox.Security

  • 问题内容: 我们的Java应用程序的一部分需要运行由非开发人员编写的javascript。这些非开发人员正在使用JavaScript进行数据格式化。(主要是简单的逻辑和字符串连接)。 我的问题是如何设置这些脚本的执行,以确保脚本错误不会对应用程序的其余部分产生重大负面影响。 需要防范无限循环 防止产生新线程。 限制访问服务和环境 文件系统(示例:如果心怀不满的脚本编写者决定删除文件) 数据库(用同

  • 我编写了一个简单的RMI服务器,并为它提供了一个默认的: 以下是服务器的代码(来自Oracle RMI教程,但我添加了RMISecurityManager): } 我这样做:

  • 什么是沙箱? 沙箱是一个允许沙箱进程创建的C++库,沙箱进程是一种运行在非常限制性的环境中的进程。沙箱进程可以唯一自由使用的资源是CPU周期和内存。例如,沙箱进程不能写磁盘或者显示他们自己的窗口。它们真正能做的事情由一种明确的策略锁控制。Chromium渲染器都是沙箱化进程。 沙箱可以保护什么,不能保护什么? 沙箱限制了运行在沙箱中的代码的bug的危害。这些bug不能在用户的账号中安装持久性的恶意

  • 问题内容: 我有通过http请求访问的数据,并由服务器以逗号分隔的格式发送回了数据,我有以下代码: 文本内容如下: 如何将这些数据保存到CSV文件中。我知道我可以按照以下步骤做一些事情,逐行进行迭代: 但是我不确定现在如何正确地将每一行写入CSV 编辑—>感谢您提供的反馈意见,该解决方案非常简单,可以在下面看到。 解: 问题答案: 一般方式: 要么 使用CSV编写器: 要么 最简单的方法:

  • Python代码运行助手可以让你在线输入Python代码,只需要在网页输入代码,然后点击Run按钮,代码被发送到远程执行后,在网页显示代码执行结果: 试试效果 需要支持HTML5的浏览器: IE >= 9 Edge Firefox Chrome Safari # 测试代码: ---- print('Hello, world')