Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pickle命令字符串中的局部变量?_Python_Pickle - Fatal编程技术网

Python pickle命令字符串中的局部变量?

Python pickle命令字符串中的局部变量?,python,pickle,Python,Pickle,这是一场安全竞赛,请不要对我大喊大叫:) 我正在尝试使用传递给pickle.loads()的字符串从访问局部变量。例如,我想这样做: local_var = 1 pickle.loads('''c__builtin__ eval (c__builtin__ compile (S"print local_var" S"error_output_file" S"exec" tRtR.''') 但是,我得到以下错误:namererror:name'local\u var'未定义 事实上,当我检查局部

这是一场安全竞赛,请不要对我大喊大叫:)

我正在尝试使用传递给
pickle.loads()
的字符串从访问局部变量。例如,我想这样做:

local_var = 1
pickle.loads('''c__builtin__
eval
(c__builtin__
compile
(S"print local_var"
S"error_output_file"
S"exec"
tRtR.''')
但是,我得到以下错误:
namererror:name'local\u var'未定义

事实上,当我检查局部变量时,它们与我预期的完全不同:

pickle.loads("""c__builtin__
locals
(tR.""")
给予

{'args':(),
“func”:,
“自我”:,
'堆栈':[]}
这里发生了什么,我该怎么做

谢谢

pickle.loads()函数无法直接访问从中调用的
.loads()
代码的局部变量。它有自己的范围。在本例中,您正在查看处理
.loads()
调用的
pickle.Unpicler
实例上其中一个方法的本地名称空间

您必须使用访问调用堆栈,然后查看各个帧的
.f_locals
映射,以达到调用函数的局部值


根据我的猜测,你需要跳过3帧,当前分派方法,调用当前分派方法的
Unpickler.load
方法,以及模块级
load()
函数,所以
sys.\u getframe(3).f_locals['local\u var']
没有任何东西可以让你得到你想要的参考。

谢谢,我会试试看!
{'args': (),
 'func': <function locals>,
 'self': <pickle.Unpickler instance at 0x108af3830>,
 'stack': []}