动态地从python脚本导入变量

时间:2017-08-15 08:28:35

标签: python import

如何在递归函数中包含文件中的var?

到目前为止我所拥有的:

#!/usr/bin/python3
import sys

def parseFile(pathToFile : str):
    print(pathToFile)
    fileVars = __import__(pathToFile, None, None, ['fileList'], 0)        
    for file in fileVars.fileList:
            parseFile(file)

parseFile(sys.argv[1])

此代码存在两个问题:

  • include语句执行导入的脚本(我不想更改脚本)。
  • 在子文件夹中找不到文件。

我不想手动解析文件,如果可能的话,我想避免包含额外的依赖项。

我知道上面是hacky。问题是:(如何)我可以通过大量清理工作来完成我想要的工作,然后编写/包含(外部)解析器。

2 个答案:

答案 0 :(得分:0)

您必须在子文件夹中创建名为__init__.py的文件。这可能是空的。

答案 1 :(得分:0)

在朋友的帮助下我得到了它:

import ast

def getVarFromPy(pathToFile: str, varName: str):
    my_ast = ast.parse(open(pathToFile).read()) # fd will be collected by GC sometime in the future
    return next(eval(compile(ast.Expression(obj.value), '<ast>', mode='eval')) for obj in my_ast.body if 
                isinstance(obj, ast.Assign) and obj.targets[0].id == varName)

令人惊讶的清洁。