有没有办法在python脚本中获取所有变量的值?
如果这个问题超出范围,请建议我可以把它移到哪里 我有很多python(版本2.7)脚本,它们相互调用。获取哪个脚本的视图 调用,我目前已经构建了一个很好的GUI树来映射它 我的问题在于解析文件。脚本调用另一个脚本的最简单示例是调用:有没有办法在python脚本中获取所有变量的值?,python,parsing,python-2.7,Python,Parsing,Python 2.7,如果这个问题超出范围,请建议我可以把它移到哪里 我有很多python(版本2.7)脚本,它们相互调用。获取哪个脚本的视图 调用,我目前已经构建了一个很好的GUI树来映射它 我的问题在于解析文件。脚本调用另一个脚本的最简单示例是调用: os.system('another.py') 这是很容易解析的,只需获取括号内的内容即可。我现在来评估变量。 我目前评估变量的方法如下: x = 'another' dot = '.' py = 'py' os.system(x+dot+py) # Find t
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
除了是一个丑陋的黑客,这个代码也有它的缺点。在做这些事情的时候
调用getVarValue查找每个变量的值,然后将这些值相加
并非所有变量都能得到它们所需的值。
例如:
x = os.getcwd() # Cannot be found by getVarValue
script = 'x.py'
os.system(x+script) # Find three variables
问题是我不想调用这些脚本(一些脚本创建/更新文件),而是按值解析它们。
由于python解释器能够解析脚本,我认为这是可能的
我已经看过了,这给了我一点帮助,还有。
但是,这两种方法似乎都无法在不运行文件的情况下解析变量
有没有一种方法(最好是pythonic)可以在不执行脚本的情况下检索变量值?根据此方法进行修改这里是一个使用ast模块提取变量的示例
可以修改它以提取所有变量,但是ast.literal\u eval
只能计算简单类型
def safe_eval_var_from_file(mod_path, variable, default=None, raise_exception=False):
import ast
ModuleType = type(ast)
with open(mod_path, "r") as file_mod:
data = file_mod.read()
try:
ast_data = ast.parse(data, filename=mod_path)
except:
if raise_exception:
raise
print("Syntax error 'ast.parse' can't read %r" % mod_path)
import traceback
traceback.print_exc()
if ast_data:
for body in ast_data.body:
if body.__class__ == ast.Assign:
if len(body.targets) == 1:
print(body.targets[0])
if getattr(body.targets[0], "id", "") == variable:
try:
return ast.literal_eval(body.value)
except:
if raise_exception:
raise
print("AST error parsing %r for %r" % (variable, mod_path))
import traceback
traceback.print_exc()
return default
# example use
this_variable = {"Hello": 1.5, 'World': [1, 2, 3]}
that_variable = safe_eval_var_from_file(__file__, "this_variable")
print(this_variable)
print(that_variable)
考虑一下您的问题:如果一个变量的值在脚本执行后发生变化,您希望显示什么?初始值还是计算值?我不确定,但您是否尝试过monkeypatching
os.system
?类似这样的东西:os.system=lambda script\u name:send\u script\u name\u to\u where\u you\u collect\u(script\u name
@BurhanKhalid:Hmm,好问题!我想找到所有值,这样我就可以找到所有被调用的脚本。@J0HN没有想到,谢谢:)如果我想为比os.system更多的模块这么做,我得把所有的模块都装上补丁,对吗?是的。此外,您可能希望跟踪修补的内容,并在某个时候将其恢复为原始值。