我已经知道python程序可以确定它的文件名,这是我见过最直接的
import sys
name = sys.argv[0]
我的问题是,导入模块中的代码可以执行相同的操作吗?我使用的是python 3.5。
我正在编写一个大型程序,为了方便和可扩展性,它被分成一个主要部分和“附加组件”,就像Audacity一样。我试图让扩展和DRY变得简单,只需将一个附加模块添加到程序目录中,主程序就可以将其拾取并使用它。我使用命名标准,其中模块文件名被赋予特定于程序的前缀以识别它们,然后在其中实现一些标准命名的类和数据。
由于主程序没有提前知道附加组件的名称,我这样导入它们,这似乎工作正常
def get_available_modules(self, prefix=""):
""" import the files named prefix_xxx.py in this folder """
files = os.listdir(os.getcwd())
self.modules = {}
for file_name in files:
# print('examining ', file_name)
if file_name.startswith(prefix):
# print('this one looks OK ', file_name)
# strip the .py off the end
mod_name = file_name[:-3]
# strip prefix off the front
mod_ID = mod_name[len(prefix):]
self.modules[mod_ID] = __import__(mod_name)
# print('loaded modules ')
# for name in self.modules:
# print(name)
获得模块之后,我可以访问他们的工作,将他们的描述放入listBox或menues,实例化并显示他们的控制面板,并将它们指向他们需要处理的资源。但是,为了调试自我一致性,我希望模块能够确定它所调用的内容,它的文件名是什么。我将通过编辑以前的功能来创建新功能,并且知道我不会一直更改所有内容。
显然,当启动对象时,我也可以传递mod_ID,但这很像魔术师被发现将兔子放入帽子。
如果模块中有任何参数使其文件名可供自己访问?
答案 0 :(得分:0)
(代表OP发布)。
咄!这是___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <