2017-08-15 200 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