让我们假设我有一个至少包含两个文件的程序,magic.py是herebemagic模块的一部分......
def foo():
# This line is what my question will be all about
pass
...和main.py,它启动程序:
import os
from herebemagic import magic
print("This is where this file lies: %s" % (repr(os.path.abspath(__file__)), ))
magic.foo()
如图所示,查找模块的文件及其所在的路径非常简单。但是我怎么能在magic.py中获得对main.py模块的引用(是解释器调用的模块,不一定是直接导入herebemagic的模块),这样我就能得到它的文件?
当然我可以在main.py中找到它,并将其传递给foo(),但实际上在两者之间可以有任意数量的模块,在我的情况下,它会是难以传递它(我正在用importlib加载很多模块,而且这些信息目前只与其中一个模块相关)。或者我可以使用内置,但这是一个没有人想要乱扔垃圾的命名空间。
答案 0 :(得分:2)
使用主脚本的名称作为命令行参数调用Python可执行文件。 Python将此保留在sys.argv
:
sys.argv[0]