pickletools — Verktyg för pickle-utvecklare

Källkod: Lib/pickletools.py


Den här modulen innehåller olika konstanter som rör de intima detaljerna i modulen pickle, några långa kommentarer om implementationen och några användbara funktioner för att analysera pickled data. Innehållet i denna modul är användbart för Python core-utvecklare som arbetar med pickle; vanliga användare av pickle-modulen kommer förmodligen inte att finna pickletools-modulen relevant.

Användning av kommandoraden

Tillagd i version 3.2.

När python -m pickletools anropas från kommandoraden kommer innehållet i en eller flera pickle-filer att demonteras. Observera att om du vill se Python-objektet som lagras i pickle snarare än detaljerna i pickle-formatet, kanske du vill använda -m pickle istället. Men när pickle-filen som du vill undersöka kommer från en opålitlig källa är -m pickletools ett säkrare alternativ eftersom den inte exekverar pickle-bytekod.

Till exempel med en tupel (1, 2) som är inlagd i filen 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

Alternativ för kommandoraden

-a, --annotate

Kommentera varje rad med en kort opcode-beskrivning.

-o, --output=<file>

Namn på en fil där utdata ska skrivas.

-l, --indentlevel=<num>

Det antal blanksteg som ska användas för att dra in en ny MARK-nivå.

-m, --memo

När flera objekt demonteras ska memo sparas mellan demonteringarna.

-p, --preamble=<preamble>

När mer än en pickle-fil anges, skriv ut den angivna ingressen före varje demontering.

pickle_file

En pickle-fil som ska läsas, eller - för att ange läsning från standardinmatning.

Programmatiskt gränssnitt

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

Skickar ut en symbolisk demontering av pickle till det filliknande objektet out, som standard till sys.stdout. pickle kan vara en sträng eller ett filliknande objekt. memo kan vara en Python-ordbok som kommer att användas som pickles memo; den kan användas för att utföra demontering av flera pickles som skapats av samma pickler. Successiva nivåer, som indikeras av MARK opkoder i flödet, är indragna med indentlevel mellanslag. Om annotate ges ett värde som inte är noll, kommenteras varje opcode i utdata med en kort beskrivning. Värdet på annotate används som en ledtråd för den kolumn där annoteringen ska börja.

Ändrad i version 3.2: Parametern annotate har lagts till.

pickletools.genops(pickle)

Tillhandahåller en iterator över alla opkoder i en pickle, och returnerar en sekvens av (opcode, arg, pos) tripplar. opcode är en instans av en OpcodeInfo-klass; arg är det avkodade värdet, som ett Python-objekt, av opcodens argument; pos är den position där denna opcode finns. pickle kan vara en sträng eller ett filliknande objekt.

pickletools.optimize(picklestring)

Returnerar en ny likvärdig pickle-sträng efter eliminering av oanvända PUT-opkoder. Den optimerade pickle-strängen är kortare, tar kortare tid att överföra, kräver mindre lagringsutrymme och avpicklas mer effektivt.