2017-08-15 82 views
-1

如何在递归函数中包含来自文件的var变量?动态从python脚本导入变量

我有什么至今:

#!/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。问题是:(如何)我可以通过大量的黑客来完成我想要的任务,那么写入/包括(外部)解析器将会更清晰。

+0

小心解释投票吗?我做了我的功课。我无法在互联网上找到更多有用的信息。我是一名Python初学者。 – lynx

回答

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) 

令人惊讶的干净。

0

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

+0

感谢您的提示,但我希望解决方案包含在主脚本中。 (我想投票您的评论不幸,我没有足够的代表。) – lynx