Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从动态生成的模块导入时运行代码_Python - Fatal编程技术网

Python 从动态生成的模块导入时运行代码

Python 从动态生成的模块导入时运行代码,python,Python,我曾经动态生成一个模块x,并在sys.modules中注册它。我希望在这个模块上调用导入时自动运行一段代码。例如,我想打印“您刚刚导入了模块x”。所以它的行为就像: >>> import x you just imported module x 如何获得这种行为?要扩展所选答案中给出的示例,您可以这样做 print "You just imported module {}".format(foo.Foo.__module__) 导入模块时,将执行任何“孤立”代码(不是在类或

我曾经动态生成一个模块
x
,并在
sys.modules
中注册它。我希望在这个模块上调用导入时自动运行一段代码。例如,我想打印“您刚刚导入了模块x”。所以它的行为就像:

>>> import x
you just imported module x

如何获得这种行为?

要扩展所选答案中给出的示例,您可以这样做

print "You just imported module {}".format(foo.Foo.__module__)

导入模块时,将执行任何“孤立”代码(不是在类或函数中编写的代码,或者不是在
中编写的代码,如果
块中编写的代码)。

为什么不将其放在模块本身中?i、 e就在
类Foo:
之前,在示例中,是否每次导入模块时都会发生这种情况?如果是,,要做到这一点,您可能需要弄乱导入挂钩。Padraic不能提供所需的行为,因为打印代码是在调用
exec
时执行的,而不是在导入模块时执行的。如果您这样做,然后在foo中运行示例
exec foo\u code中的行。\uu dict\uu
,则只要调用,打印就会发生
exec
这不会使打印在导入的模块中的
import foo
上运行。我的理解是,这段代码将放在模块中进行导入。