pickletools
— Pickle 开发人员工具¶
源代码: Lib/pickletools.py
此模块包含与 pickle
模块的内部细节相关的各种常量,一些关于实现的冗长注释以及一些用于分析腌制数据的有用函数。此模块的内容对正在处理 pickle
的 Python 核心开发人员很有用;pickle
模块的普通用户可能不会发现 pickletools
模块相关。
命令行用法¶
在 3.2 版中添加。
从命令行调用时,python -m pickletools
将反汇编一个或多个 pickle 文件的内容。请注意,如果你想查看存储在 pickle 中的 Python 对象,而不是 pickle 格式的详细信息,你可能需要使用 -m pickle
。但是,当你要检查的 pickle 文件来自不受信任的来源时,-m pickletools
是一个更安全的选项,因为它不会执行 pickle 字节码。
例如,用一个元组 (1, 2)
在文件 x.pickle
中腌制
$ python -m pickle x.pickle
(1, 2)
$ python -m pickletools x.pickle
0: \x80 PROTO 3
2: K BININT1 1
4: K BININT1 2
6: \x86 TUPLE2
7: q BINPUT 0
9: . STOP
highest protocol among opcodes = 2
命令行选项¶
- -a, --annotate¶
用简短的操作码描述注释每行。
- -o, --output=<file>¶
应将输出写入到的文件名称。
- -l, --indentlevel=<num>¶
缩进新 MARK 级别时要使用的空格数。
- -m, --memo¶
当对多个对象进行反汇编时,在反汇编之间保留备忘录。
- -p, --preamble=<preamble>¶
当指定多个 pickle 文件时,在每次反汇编之前打印给定的前言。
编程接口¶
- pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)¶
将 pickle 的符号反汇编输出到类似文件的对象 out,默认为
sys.stdout
。pickle 可以是字符串或类似文件的对象。memo 可以是将用作 pickle 备忘录的 Python 字典;它可用于对由同一 pickle 程序创建的多个 pickle 执行反汇编。流中由MARK
操作码指示的连续级别,由 indentlevel 个空格缩进。如果向 annotate 提供非零值,则输出中的每个操作码都会用简短的描述进行注释。annotate 的值用作注释应开始的列的提示。3.2 版中已更改:添加了 annotate 参数。
- pickletools.genops(pickle)¶
提供一个 迭代器,用于遍历 pickle 中的所有操作码,返回一个
(opcode, arg, pos)
三元组序列。opcode 是OpcodeInfo
类的实例;arg 是操作码参数的解码值(作为 Python 对象);pos 是此操作码所在的位置。pickle 可以是字符串或类文件对象。
- pickletools.optimize(picklestring)¶
在消除未使用的
PUT
操作码后,返回一个新的等效 pickle 字符串。经过优化的 pickle 更短,传输时间更短,需要的存储空间更小,并且解 pickle 的效率更高。