使用globals() 和locals() 获取当前变量列表。
例如:
a = 10
def f():
i = 0
j = 3
print(locals())
print(globals())
f()
意思:
{'i': 0, 'j': 3}
{'a': 10, 'f': ..., other pre-defined variables}
至于保存,也许使用pickle或dill之类的工具来创建字典的二进制表示并将生成的文件视为快照?
例如,当我们将变量保存到文件snapshot.pkl时:
import dill
a = 10
def f():
i = 0
j = 3
with open('snapshot.pkl', 'wb') as fd:
dill.dump({
'locals': locals(),
'globals': globals()
}, fd)
f()
然后稍后将其加载到另一个文件中:
import dill
with open('snapshot.pkl', 'rb') as fd:
state = dill.load(fd)
print(state['locals'])
输出:
{'i': 0, 'j': 3}
对于调用堆栈,我不确定您是否想要格式良好的调用堆栈或只是获取信息,但您可以通过 traceback 模块使用函数 traceback.format_stack(或 traceback.print_stack )。