如果此问题超出范围,请建议我可以移动它的位置。
我有很多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)在不执行脚本的情况下检索变量值?
答案 0 :(得分:1)
从此Python3 Q&A,修改了一个使用ast模块提取变量的示例。
可以修改它以提取所有变量,但b =
20 30 45 55
25 25 50 60
28 33 48 62
只能评估简单类型。
ast.literal_eval