如何确定正在导入的模块中导入模块的名称。我有部分解决方案,但不是完整解决方案。
代码是: 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?这是怎么做到的?
答案 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-stack或traceback。两者都会给你堆栈的函数调用,所以这不是你想要的解决方案(模块)。