import pickle
import os
class Inject(object):
def __reduce__(self):
return (os.system, ('ls',))
serialize = pickle.dumps(Inject())
command_res = pickle.loads(serialize)
print(type(command_res))
问题是 pickle.loads
返回一个 tuple
并且元组的第二个元素是 int
,所以 command_res
> 将分配给 int
,但我想获取 pickle.loads
的第一个索引 [0]
,所以 command_res
将被赋值给 str
,它是 ls
的结果。
我怎样才能做到这一点?
最佳答案
问题是,如果您使用库 subprocess 执行命令,os.system
不会返回命令 ls
的输出。你得到输出并且可以得到一个 str
而不是 int
,所以你的代码将是:
import pickle
import subprocess
class Inject(object):
def __reduce__(self):
return (subprocess.check_output, (['ls'],))
serialize = pickle.dumps(Inject())
command_res = pickle.loads(serialize).decode()
print(type(command_res))
关于python - 如何通过 __reduce__ 实现代码执行来进行 pickle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57099631/