On this page
pickletools —pickle 开发人员的工具
源代码: Lib/pickletools.py
此模块包含与pickle模块的详细信息有关的各种常量,有关实现的一些冗长 Comments 以及一些用于分析腌制数据的有用Function。该模块的内容对正在pickle上工作的 Python 核心开发人员很有用。 pickle模块的普通用户可能找不到pickletools模块相关。
命令行用法
3.2 版中的新Function。
从命令行调用时,python -m pickletools
将反汇编一个或多个 pickle 文件的内容。请注意,如果要查看存储在 pickle 中的 Python 对象而不是 pickle 格式的详细信息,则可能要使用-m pickle
。但是,当您要检查的 pickle 文件来自不受信任的来源时,-m pickletools
是更安全的选择,因为它不执行 pickle 字节码。
例如,将 Tuples(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`
- 用简短的操作码说明 Comments 每行。
-o
``,
--output
=<file>
- 应该将输出写入其中的文件的名称。
-l
``,
--indentlevel
=<num>
- 缩进新 MARK 级别的空白数。
-m
`,` `--memo`
- 分解多个对象时,请在分解之间保留备忘。
-p
``,
--preamble
=<preamble>
- 如果指定了多个 pickle 文件,请在每次拆卸前打印给定的序言。
Programmatic Interface
pickletools.
dis
(* pickle , out = None , memo = None , indentlevel = 4 , annotate = 0 *)- 将 pickle 的符号反汇编输出到文件状对象* out *,默认为
sys.stdout
。 * pickle *可以是字符串或类似文件的对象。 * memo 可以是将用作 pickle 备忘录的 Python 字典;它可用于在同一台腌制机创建的多个腌制机上进行拆卸。流中由MARK
个操作码表示的连续级别由 indentlevel 空格缩进。如果给 annotate *提供了一个非零值,则输出中的每个操作码都带有简短描述。 * annotate *的值用作 Comments 应开始的列的提示。
- 将 pickle 的符号反汇编输出到文件状对象* out *,默认为
3.2 版中的新Function:* annotate *参数。
pickletools.
genops
(腌)- 在 pickle 中的所有操作码上提供iterator,返回
(opcode, arg, pos)
三 Tuples 的序列。 * opcode *是OpcodeInfo
类的实例; * arg *是操作码参数的解码值(作为 Python 对象); * pos *是此操作码所在的位置。 * pickle *可以是字符串或类似文件的对象。
- 在 pickle 中的所有操作码上提供iterator,返回
pickletools.
optimize
(* picklestring *)- 消除未使用的
PUT
操作码后,返回一个新的等效的 pickle 字符串。优化的酱菜更短,花费更少的传输时间,需要更少的存储空间并更有效地去除斑点。
- 消除未使用的