pickletools
——泡菜开发者工具¶
源代码: Lib/pickletools.py
此模块包含与 pickle
模块,一些关于实现的冗长评论,以及一些用于分析泡菜数据的有用函数。此模块的内容对于正在开发 pickle
;的普通用户 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>¶
缩进新标记级别的空白数。
- -m, --memo¶
分解多个对象时,在反汇编之间保留备忘。
- -p, --preamble=<preamble>¶
如果指定了多个pickle文件,请在每次反汇编之前打印给定的前导码。
程序接口¶
- pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)¶
将pickle的符号反汇编输出到类似文件的对象 out ,默认为
sys.stdout
. 泡菜 可以是字符串或类似文件的对象。 memo 可以是将用作pickle备注的python字典;它可以用于在同一个pickler创建的多个pickle之间执行反汇编。连续水平,表示为MARK
流中的操作码被缩进 缩进水平 空间。如果给非零值 注释 ,输出中的每个操作码都用简短的描述进行注释。价值 注释 用作注释应开始的列的提示。3.2 新版功能: 这个 注释 参数。
- pickletools.genops(pickle)¶
提供了一个 iterator 在pickle中的所有操作码上,返回
(opcode, arg, pos)
三元组。 操作码 是的实例OpcodeInfo
类; arg 作为python对象,是操作码参数的解码值; pos 是此操作码所在的位置。 泡菜 可以是字符串或类似文件的对象。
- pickletools.optimize(picklestring)¶
删除未使用的pickle字符串后返回新的等效pickle字符串
PUT
操作码。优化后的泡菜较短,传输时间短,存储空间小,取菜效率高。