问题标签 [python-exec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
15249 浏览

python - 为什么要避免 exec() 和 eval()?

我在多个地方多次看到这种情况,但从来没有找到令人满意的解释来解释为什么会出现这种情况。

所以,希望这里能介绍一个。为什么我们(至少,通常)不应该使用exec()and eval()

编辑:我看到人们假设这个问题与网络服务器有关——事实并非如此。我可以看到为什么传递给的未经处理的字符串exec可能是坏的。在非 Web 应用程序中是不是很糟糕?

0 投票
3 回答
9185 浏览

python - 如何在 Python 中安全地使用 exec()?

我的任务是构建一个应用程序,在该应用程序中,最终用户可以使用自定义规则来评估返回的查询是否会导致警告或警报(基于自己的阈值)。

我为用户构建了一种方法来模板化他们的逻辑。一个示例如下所示:

<<21>><<22>>参数将替换为程序前面找到的值。一旦所有这些替换发生,我就有一个非常简单的 if/else 块(在本例中),看起来像这样存储在变量 ( execCd) 中:

这将exec()正确。现在,我怎样才能确保这一点?我看过这篇文章: http: //lybniz2.sourceforge.net/safeeval.html

我的代码最终看起来像这样:

但是,当我有第二个和第三个参数但此异常时,执行失败 -NameError: name 'retVal' is not defined

最终用户拥有的一些自定义逻辑非常广泛,其中大部分都会定期更改。我不想维护他们的自定义逻辑,最终用户希望能够快速测试各种警告/警报阈值逻辑。

如何从不安全(有意或无意)代码中保护此 exec 语句?

0 投票
2 回答
470 浏览

python - 为什么 Python 生成器在执行脚本中将其范围与全局混淆?

好的,所以我在一个工具的配置脚本是exec'd python 脚本的环境中工作。exec 调用是这样的:

外部.py:

现在,我想在exec'd 脚本中做一些相对基本的迭代。在这种情况下,当某些值不在白名单中时进行工作:

内部.py:


运行python inner.py产生预期的结果:

这是奇怪的部分:运行python outer.py似乎表明解释器对生成器的范围感到困惑:


其他一些注意事项:

  • 你可以在循环print(key)内很好(在生成器运行之前)。for

  • 将空字典替换locals()为解决execouter.py问题,但该代码超出了我的控制范围。

  • 我正在运行 OS X 构建的 Python 2.7.2 (Mountain Lion)。

0 投票
2 回答
359 浏览

python - python3 print() 在 exec()

在python3中,当我运行

我的意思是在 Python3 中, exec() 的 arg2 需要一个字典,但我们仍然可以放置一个不是字典的 print() 函数。为什么?

0 投票
4 回答
6048 浏览

python - 通过互联网/多种协议导入 python 模块或动态创建模块

是否可以import使用http( s) ftpsmb或任何其他协议通过 Internet 访问 Python 模块?如果是这样,怎么做?如果不是,为什么?

我想这是关于让 Python 更多地使用一种协议(读取文件系统)并使其也能够使用其他协议。是的,我同意它会慢很多倍,但是一些优化和更大的未来带宽肯定会平衡它。

例如:

0 投票
2 回答
2403 浏览

python - Python:exec 总是不好的做法,如果是,为什么不弃用

有人能想出一个使用 exec 的良好实践示例吗?

如果总有一种更高效、更安全的方式来替换 exec,为什么 python 不弃用 exec?

0 投票
1 回答
990 浏览

python - 如何编写一个可以获取和执行python命令的python脚本?

我对 Python 很陌生。我正在尝试修改脚本,使其在无限循环中运行,从控制台获取 Python 代码行并执行 Python 代码行。

我说的是可以做以下例子的东西:

我试过使用 exec() 函数。它可以很好地运行我在脚本中定义的函数,但由于某种原因它不能真正执行所有代码。我不明白它的逻辑。我得到:

有人可以帮忙吗?

谢谢,
古尔


嗨凯尔,

这是代码:

0 投票
1 回答
820 浏览

python - 从 Python 中动态创建的模块导入代码

我有一个项目试图动态创建一个新模块,然后在后续exec语句中尝试导入该模块。

但这会引发此异常:

我已经尝试了几件事:将它添加到 sys.modules,创建一个scope包含名称和模块的字典。但没有骰子。当我print locals()在我的exec语句中执行 a 时,我可以看到 testmodule.testA,但我无法导入它。我在这里想念什么?

谢谢你。

0 投票
2 回答
183 浏览

python - 在 exec() 中定义的回调期间关闭丢失

这是我使用 Python 的第三天,所以请原谅新手的错误。所以这是我的工作代码。person.test()向老板注册回调,老板调用回调,一切正常。

但是,如果我将回调更改为 exec(),则关闭将丢失。回调运行,但selfdata是未知的,因此对self.woot(data)的调用失败。

我也尝试过 compile() ,但没有运气。有什么想法吗?我真的不想通过老板手动携带自我/数据的副本并返回,因为我的真实代码更加复杂。我真的需要一种方法来保持关闭。

0 投票
1 回答
941 浏览

python - 如何更改 __builtins__ 模块变量?

如果您运行此代码:

蟒蛇说:

这就是我喜欢做的事情,但是在创建(或加载)新模块时:

如您所见,它运行,但我喜欢它不像上面的程序那样。我喜欢禁用所有内置变量和函数。有没有办法做到这一点?

如果您 p​​rint mod.__dict__,您可以看到它具有__builtins__变量,例如任何 Python 模块。我想我必须将其值更改为{},但我不知道如何。