pickletools — Werkzeuge für Pickle-Entwickler

Quellcode: Lib/pickletools.py


Dieses Modul enthält verschiedene Konstanten, die sich auf die inneren Details des pickle Moduls beziehen, einige ausführliche Kommentare zur Implementierung und einige nützliche Funktionen zur Analyse von gepickelten Daten. Die Inhalte dieses Moduls sind für Python-Kernentwickler, die am pickle arbeiten, nützlich; normale Benutzer des pickle Moduls werden das pickletools Modul wahrscheinlich nicht als relevant erachten.

Verwendung über die Kommandozeile

Hinzugefügt in Version 3.2.

Wenn es von der Befehlszeile aufgerufen wird, zerlegt python -m pickletools den Inhalt einer oder mehrerer Pickle-Dateien. Beachten Sie, dass Sie, wenn Sie das in der Pickle gespeicherte Python-Objekt anstelle der Details des Pickle-Formats sehen möchten, stattdessen -m pickle verwenden möchten. Wenn die Pickle-Datei, die Sie untersuchen möchten, jedoch aus einer nicht vertrauenswürdigen Quelle stammt, ist -m pickletools eine sicherere Option, da es keine Pickle-Bytecodes ausführt.

Zum Beispiel, mit einem Tupel (1, 2), das in der Datei x.pickle gepickelt wurde

$ 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

Kommandozeilenoptionen

-a, --annotate

Annotiert jede Zeile mit einer kurzen Opcode-Beschreibung.

-o, --output=<file>

Name einer Datei, in die die Ausgabe geschrieben werden soll.

-l, --indentlevel=<num>

Die Anzahl der Leerzeichen, um die eine neue MARK-Ebene eingerückt werden soll.

-m, --memo

Wenn mehrere Objekte zerlegt werden, wird das Memo zwischen den Zerlegungen beibehalten.

-p, --preamble=<preamble>

Wenn mehr als eine Pickle-Datei angegeben ist, wird vor jeder Zerlegung die angegebene Präambel ausgegeben.

pickle_file

Eine zu lesende Pickle-Datei oder -, um das Lesen von Standard-Input anzuzeigen.

Programmierschnittstelle

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

Gibt eine symbolische Zerlegung des Pickles an das dateiähnliche Objekt out aus, standardmäßig sys.stdout. pickle kann ein String oder ein dateiähnliches Objekt sein. memo kann ein Python-Dictionary sein, das als Memo des Pickles verwendet wird; es kann verwendet werden, um Zerlegungen über mehrere Pickles hinweg durchzuführen, die vom selben Pickler erstellt wurden. Aufeinanderfolgende Ebenen, die durch MARK Opcodes im Stream angezeigt werden, werden um indentlevel Leerzeichen eingerückt. Wenn ein Nicht-Null-Wert für annotate angegeben wird, wird jeder Opcode in der Ausgabe mit einer kurzen Beschreibung versehen. Der Wert von annotate wird als Hinweis für die Spalte verwendet, in der die Anmerkung beginnen soll.

Geändert in Version 3.2: Der Parameter annotate wurde hinzugefügt.

pickletools.genops(pickle)

Bietet einen Iterator über alle Opcodes in einem Pickle, der eine Sequenz von (opcode, arg, pos) Tupeln zurückgibt. opcode ist eine Instanz einer Klasse OpcodeInfo; arg ist der dekodierte Wert des Opcode-Arguments als Python-Objekt; pos ist die Position, an der sich dieser Opcode befindet. pickle kann ein String oder ein dateiähnliches Objekt sein.

pickletools.optimize(picklestring)

Gibt einen neuen, äquivalenten Pickle-String zurück, nachdem ungenutzte PUT Opcodes eliminiert wurden. Der optimierte Pickle ist kürzer, benötigt weniger Übertragungszeit, weniger Speicherplatz und wird effizienter entpickelt.