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 avMARK
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 enOpcodeInfo
-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.