Python:为模块及其导入设置全局参数

2024-09-28 17:00:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python开发一个测试引擎,但是我遇到了一些与模块加载和全局函数相关的问题。在

我正在创建的框架的主要思想是加载一个包含函数和注释“@thisisatest”的Python文件,以确定哪些函数是测试函数。我用冲击加载源,后者,我生成从加载的模块调用函数的线程。是这样的:

module = imp.load_source("test", "testdir/test.py")
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()

不管怎样,我想连接到这个测试一个“断言函数”,做一些类似的事情:

^{pr2}$

没关系。当测试.py导入另一个在其中使用assertAndTerminate函数的模块。加载的模块测试.py完全不知道测试.py而且不知道我说的assertAndTerminate是谁(这很有意义,因为每个模块都有自己的全局参数)。在

有没有人知道我可以为测试.py模块以及它在线程中加载的模块?我宁愿不在树中搜索导入,有可能吗?在

有没有类似Thread(target=function, global_vars=["assertAndTerminate":assertionFunction])的东西?在


Tags: 模块函数pytest引擎框架targetfunction
1条回答
网友
1楼 · 发布于 2024-09-28 17:00:51

您需要在模块上直接设置属性;即是该模块的全局命名空间:

module = imp.load_source("test", "testdir/test.py")
module.assertAndTerminate = assertionFunction

您可以在每个模块的基础上设置全局变量。导入时,来自一个模块的全局参数不会传播到其他模块。在

您可以将添加到__builtin__模块(python3中的builtin)中:

^{pr2}$

然后在所有模块中都可以看到:

>>> import __builtin__
>>> __builtin__.foobar = 'barbaz'
>>> foobar
'barbaz'

一般来说,你真的不想这样做。找其他方法来解决你的问题。导入代码,而不是依赖于已设置的全局参数。在

相关问题 更多 >