python - 如何通过 __reduce__ 实现代码执行来进行 pickle?

标签 python python-3.x pickle

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/

相关文章:

python - 创建字典时出现意外行为

python - boto3 使用 AWS Lambda 启动/停止 RDS 实例

python - 使用 Python 3.4 在 Textmate 2 中输出错误

python - Django 2.0 国际化 | i18n_patterns 不起作用

python - 运行 python 3.9.4 时,我无法导入 tkinter,但降级到 3.8.2 工作正常

python - 使用 lambda 序列化 cython 类时出现 pickle 错误

python - 在测试期间,Pickle 无法将对象存储在 django locmem 缓存中?

python - Pickle+gzip - 如何利用多核?

python - ROC 曲线表明我的预测比随机预测更糟糕,但我的混淆矩阵却表明情况并非如此

python - 在for循环中操作字符串