有没有办法在python脚本中获取所有变量值?

时间:2014-06-30 08:40:51

标签: python parsing python-2.7

如果此问题超出范围,请建议我可以移动它的位置。

我有很多python(版本2.7)脚本,它们互相调用。获取哪个脚本的视图 调用,我目前已经构建了一个很好的GUI树来映射它。

我遇到的问题在于解析文件。调用另一个脚本的脚本的最简单示例是调用:

os.system('another.py')

这很简单,只需要取括号内的内容即可解析。我现在来评估变量。 我目前评估变量的方法是这样的:

x = 'another'
dot = '.'
py = 'py'
os.system(x+dot+py) # Find three variables

listOfVars = getVarsBetweenParenthesis() # Pseudo code.

# Call getVarValue to find value for every variable, then add these together 

'''
    Finds the value of a variable.
'''
def getVarValue(data, variable, stop):
    match = ''
    for line in data:
        noString = line.replace(' ', '') # Remove spaces
        if variable+'=' in noString:
            match = line.replace(variable+'=', '').strip()
        if line == stop:
            break
    return match

除了是一个丑陋的黑客之外,这段代码还有其缺点。做的时候 Call getVarValue to find value for every variable, then add these together并非所有变量都获得所需的值。 例如:

x = os.getcwd() # Cannot be found by getVarValue
script = 'x.py'
os.system(x+script) # Find three variables

问题是我不想调用这些脚本(某些脚本创建/更新文件),而是按值解析它们。 由于python解释器能够解析脚本,我认为这必须是可能的。

我已经查看了tokenize,这给了我很少的帮助,abstract syntax trees。 但是,如果不运行该文件,这两个似乎都无法解析变量。

有没有办法(最好是pythonic)在不执行脚本的情况下检索变量值?

1 个答案:

答案 0 :(得分:1)

从此Python3 Q&A,修改了一个使用ast模块提取变量的示例。

可以修改它以提取所有变量,但b = 20 30 45 55 25 25 50 60 28 33 48 62 只能评估简单类型。

ast.literal_eval