python - 在导入之前/期间注入(inject)变量

标签 python python-2.7 python-2.x

<分区>

基本上,我想强制一个变量,让我们将他称为 jim 到我作为全局加载的插件中,插件加载之前,例如:

load_plugin('blah', variables={'jim':1}) #For instance

然后在 blah.py 中:

print jim #prints 1

有什么简单的方法可以做到这一点吗?如果它不在标准库中也没什么大不了的。

最佳答案

不 - 没有办法在 插件被首先导入之前做到这一点 - 所以,如果你的变量在模块主体本身中使用,你就不走运了。

如果变量在模块的函数或方法(但不是类主体)中用作全局变量,则可以在导入模块后更改它,只需执行以下操作:

import module
module.jim = 5

你可能知道。 (而且我知道这不是您要的)。

因此,实现该目标的唯一方法是解析模块的源代码,并更改那里的变量分配,保存源代码并将其导入。好吧,有办法用内存中的源代码模拟导入,但这种方法太不切实际了,我们不应该详细介绍。

如果您可以控制要以这种方式进行猴子修补的模块的源代码,我的建议是使用一个配置文件,模块将从中选择变量名称。

然后生成配置文件,执行导入(注意它尚未导入到 sys.modules 中),然后就完成了。

关于python - 在导入之前/期间注入(inject)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944806/

相关文章:

python - 使用 python 对 Robot Framework 中的测试套件中的每个测试用例进行测试设置和拆卸

python - 两个进程之间的IPC示例,opencv(cv::Mat对象)c++作为服务器,python作为客户端

python - 如何使用discord.py 获取discord 用户的用户ID

python - 有没有办法检测 python 程序何时结束?

python - 从 str 派生的类的构造函数,具有不同的签名

python - __cmp__ 方法在 Python 2.x 中是否没有按预期工作?

python - 热衷于剪切字符串中变化的文本吗?

python - Django索引错误: Pop from empty list

Python argparse - 带有命令选项的选项

python - 在第 n 次出现后删除字符串的其余部分