python确定导入模块的名称

时间:2012-12-10 14:45:19

标签: python multithreading import names

如何确定正在导入的模块中导入模块的名称。我有部分解决方案,但不是完整解决方案。

代码是: A.py

import B

if __name__ == '__main__':
    print 'This a test'

The B.py

import sys
import C
if sys.argv[0] == 'A':
    doSomething()

此时,我已全部设置,因为在模块B中,我知道调用导入的main的名称,在本例中是A.但是,在B中,请求导入C,它是在C中,我想知道B是否导入C?这是怎么做到的?

3 个答案:

答案 0 :(得分:2)

执行sys.argv[0]时,

import不是模块的名称。这是可执行文件的名称。

另一方面,Python模块__name__内部等于a)模块名称,如果它是通过导入执行的,b)"__main__"如果它是作为脚本执行的。

模块不“知道”执行import的人(没有“父”属性或类似的东西)。使用不同的函数定义您的行为,并从不同的模块中调用它们。

答案 1 :(得分:0)

我怀疑这实际上是你想要做的事情。请特别注意,B中的顶级代码只运行一次,无论从多个地方导入模块的次数是多少次。

例如,如果您还在模块B到达之前导入模块C的某个地方导入模块D,则从B导入的C代码将永远不会运行。

我认为在C中定义一个函数可能更好一点,B在导入C后可以运行一次。

答案 2 :(得分:0)

您可以尝试interpreter-stacktraceback。两者都会给你堆栈的函数调用,所以这不是你想要的解决方案(模块)。