pickletools — pickle 開發人員的工具

原始碼: Lib/pickletools.py


這個模組包含與 pickle 模組的內部細節相關的各種常量,一些關於實現的詳細註釋,以及一些用於分析 pickle 資料的有用函式。這個模組的內容對於正在開發 pickle 的 Python 核心開發人員很有用; pickle 模組的普通使用者可能不會覺得 pickletools 模組相關。

命令列用法

3.2 版本新增。

從命令列呼叫時,python -m pickletools 將反彙編一個或多個 pickle 檔案的內容。 請注意,如果您想檢視儲存在 pickle 中的 Python 物件而不是 pickle 格式的細節,您可能需要使用 -m pickle。 但是,當您要檢查的 pickle 檔案來自不受信任的來源時,-m pickletools 是更安全的選擇,因為它不執行 pickle 位元組碼。

例如,對於在檔案 x.pickle 中 pickle 的元組 (1, 2)

$ 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

當反彙編多個物件時,在反彙編之間保留 memo。

-p, --preamble=<preamble>

當指定多個 pickle 檔案時,在每次反彙編之前列印給定的 preamble。

程式化介面

pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)

將 pickle 的符號反彙編輸出到類檔案物件 out,預設為 sys.stdoutpickle 可以是字串或類檔案物件。 memo 可以是一個 Python 字典,它將被用作 pickle 的 memo; 它可用於在同一 pickler 建立的多個 pickle 中執行反彙編。 由流中的 MARK 操作碼指示的連續級別按 indentlevel 空格縮排。 如果為 annotate 提供非零值,則輸出中的每個操作碼都會用簡短的描述進行註釋。 annotate 的值用作註釋應開始的列的提示。

在 3.2 版本中變更:添加了 annotate 引數。

pickletools.genops(pickle)

提供一個在 pickle 中所有操作碼上的 迭代器,返回 (opcode, arg, pos) 三元組序列。 opcodeOpcodeInfo 類的例項; arg 是操作碼引數的解碼值,作為 Python 物件; pos 是此操作碼所在的位置。 pickle 可以是字串或類檔案物件。

pickletools.optimize(picklestring)

在消除未使用的 PUT 操作碼後,返回一個新的等效 pickle 字串。 最佳化的 pickle 更短,傳輸時間更少,需要的儲存空間更少,並且反 pickle 的效率更高。