pickletools
— pickle 開發者工具¶
原始碼: Lib/pickletools.py
此模組包含與 pickle
模組內部細節相關的各種常量、關於實現的冗長註釋,以及一些用於分析 pickled 資料的有用函式。此模組的內容對開發 pickle
的 Python 核心開發者很有用;pickle
模組的普通使用者可能不會覺得 pickletools
模組相關。
命令列用法¶
在 3.2 版本加入。
從命令列呼叫時,python -m pickletools
將反彙編一個或多個 pickle 檔案的內容。請注意,如果您想檢視 pickle 中儲存的 Python 物件而不是 pickle 格式的詳細資訊,您可能希望使用 -m pickle
。但是,當您想要檢查的 pickle 檔案來自不受信任的源時,-m pickletools
是一個更安全的選擇,因為它不執行 pickle 位元組碼。
例如,對於檔案 x.pickle
中 pickled 的元組 (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 檔案時,在每次反彙編前列印給定的前導。
- pickle_file¶
要讀取的 pickle 檔案,或
-
表示從標準輸入讀取。
程式設計介面¶
- pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)¶
將 pickle 的符號反彙編輸出到類檔案物件 out,預設為
sys.stdout
。pickle 可以是字串或類檔案物件。memo 可以是一個 Python 字典,用作 pickle 的備忘錄;它可用於對由同一 pickler 建立的多個 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 更高效。