如果这个问题不在范围内,请建议我可以将其移动到哪里。
我有很多Python脚本(版本2.7),它们互相调用。为了查看哪个脚本调用了哪个脚本,我目前已经构建了一个漂亮的GUI树来映射它们之间的关系。
我的问题在于解析文件。一个脚本调用另一个脚本的最简单示例是调用:
这很容易解析,只需取出括号内的内容。现在我开始评估变量。 我目前评估变量的方法如下:
除了这段代码很丑陋之外,它还有一些缺点。当执行
问题在于我不想调用这些脚本(一些脚本创建/更新文件),而是通过值来解析它们。由于Python解释器能够解析脚本,我想这应该是可能的。
我已经研究了tokenize,但没有什么帮助,还有抽象语法树。然而,这两者似乎都不能解析变量而不运行文件。
是否有一种方法(最好是Pythonic)可以在不执行脚本的情况下检索变量值?
我有很多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,但没有什么帮助,还有抽象语法树。然而,这两者似乎都不能解析变量而不运行文件。
是否有一种方法(最好是Pythonic)可以在不执行脚本的情况下检索变量值?
os.system
吗?像这样:os.system = lambda script_name: send_script_name_to_where_you_collect_them(script_name)
。 - J0HN