目录中有各种python文件,所有这些文件都包含一个函数desciption(),如下所示:
def description():
desc = 'something'
return desc
现在我有main.py如下:
def a():
pth = os.listdir('homedir/workspace')
for filename in pth :
exec "import " + filename
desc = eval(filename + '.desciption()')
print desc
现在当我运行python main.py时,没有任何反应。运行python main.py时如何打印此desc? 提前谢谢!
答案 0 :(得分:1)
假设导入有效,并且您在每次迭代中导入了一个名为filename
的模块,那么可以按名称获取模块,并调用其descrpition()
方法:
import sys
mod = sys.modules[filename]
print mod.description()
但请注意,打印模块的pydocs可能更有意义:
print mod.__doc__
答案 1 :(得分:1)
您没有在此行中正确关闭引号:
pth = os.listdir('homedir/workspace)
此外,你不应该在这里使用eval:
desc = eval(filename + '.desciption()')
我假设您想在此处按变量导入:
exec "import " + filename
这应该是这样的:
def a():
import importlib
pth = os.listdir('homedir/workspace')
for filename in pth :
mdl = importlib.import_module(os.path.splitext(filename)[0])
desc = mdl.description()
print desc
请参阅https://docs.python.org/2/library/importlib.html#importlib.import_module
https://docs.python.org/2/library/os.path.html#os.path.splitext
答案 2 :(得分:0)
desc = None
答案 3 :(得分:0)
def a():
pth = os.listdir('homedir/workspace')
for filename in pth:
module_name = os.path.splitext(filename)[0]
exec "import " + module_name
desc = eval(module_name + '.description()')
print desc
确保main.py与您的模块位于同一路径。或者通过
将其添加到sys路径import sys
sys.path.append(r"homedir/workspace")