pickletools --- pickle 開(kāi)發(fā)者工具集?

源代碼: Lib/pickletools.py


此模塊包含與 pickle 模塊內(nèi)部細(xì)節(jié)有關(guān)的多個(gè)常量,一些關(guān)于具體實(shí)現(xiàn)的詳細(xì)注釋,以及一些能夠分析封存數(shù)據(jù)的有用函數(shù)。 此模塊的內(nèi)容對(duì)需要操作 pickle 的 Python 核心開(kāi)發(fā)者來(lái)說(shuō)很有用處;pickle 的一般用戶則可能會(huì)感覺(jué) pickletools 模塊與他們無(wú)關(guān)。

命令行語(yǔ)法?

3.2 新版功能.

當(dāng)從命令行發(fā)起調(diào)用時(shí),python -m pickletools 將對(duì)一個(gè)或更多 pickle 文件的內(nèi)容進(jìn)行拆解。 請(qǐng)注意如果你查看 pickle 中保存的 Python 對(duì)象而非 pickle 格式的細(xì)節(jié),你可能需要改用 -m pickle。 但是,當(dāng)你想檢查的 pickle 文件來(lái)自某個(gè)不受信任的源時(shí),-m pickletools 是更安全的選擇,因?yàn)樗粫?huì)執(zhí)行 pickle 字節(jié)碼。

例如,對(duì)于一個(gè)封存在文件 x.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

命令行選項(xiàng)?

-a, --annotate?

使用簡(jiǎn)短的操作碼描述來(lái)標(biāo)注每一行。

-o, --output=<file>?

輸出應(yīng)當(dāng)寫(xiě)入到的文件名稱。

-l, --indentlevel=<num>?

一個(gè)新的 MARK 層級(jí)所需縮進(jìn)的空格數(shù)。

-m, --memo?

當(dāng)反匯編多個(gè)對(duì)象時(shí),保留各個(gè)反匯編的備忘記錄。

-p, --preamble=<preamble>?

當(dāng)指定一個(gè)以上的 pickle 文件時(shí),在每次反匯編之前打印給定的前言。

編程接口?

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

將 pickle 的符號(hào)化反匯編數(shù)據(jù)輸出到文件類對(duì)象 out,默認(rèn)為 sys.stdout。 pickle 可以是一個(gè)字符串或一個(gè)文件類對(duì)象。 memo 可以是一個(gè)將被用作 pickle 的備忘記錄的 Python 字典;它可被用來(lái)對(duì)由同一封存器創(chuàng)建的多個(gè)封存對(duì)象執(zhí)行反匯編。 由 MARK 操作碼指明的每個(gè)連續(xù)級(jí)別將會(huì)縮進(jìn) indentlevel 個(gè)空格。 如果為 annotate 指定了一個(gè)非零值,則輸出中的每個(gè)操作碼將以一個(gè)簡(jiǎn)短描述來(lái)標(biāo)注。 annotate 的值會(huì)被用作標(biāo)注所應(yīng)開(kāi)始的列的提示。

3.2 新版功能: annotate 參數(shù)。

pickletools.genops(pickle)?

提供包含 pickle 中所有操作碼的 iterator,返回一個(gè) (opcode, arg, pos) 三元組的序列。 opcodeOpcodeInfo 類的一個(gè)實(shí)例;arg 是 Python 對(duì)象形式的 opcode 參數(shù)的已解碼值;pos 是 opcode 所在的位置。 pickle 可以是一個(gè)字符串或一個(gè)文件類對(duì)象。

pickletools.optimize(picklestring)?

在消除未使用的 PUT 操作碼之后返回一個(gè)新的等效 pickle 字符串。 優(yōu)化后的 pickle 將更為簡(jiǎn)短,耗費(fèi)更為的傳輸時(shí)間,要求更少的存儲(chǔ)空間并能更高效地解封。