pickletools —ピクルス開発者向けのツール
ソースコード: :source: `Lib / pickletools.py`
このモジュールには、 pickle モジュールの詳細に関連するさまざまな定数、実装に関する長いコメント、およびpickle化されたデータを分析するためのいくつかの便利な関数が含まれています。 このモジュールの内容は、 pickle に取り組んでいるPythonコア開発者に役立ちます。 pickle モジュールの通常のユーザーは、おそらく pickletools モジュールが適切であるとは思わないでしょう。
コマンドラインの使用法
バージョン3.2の新機能。
コマンドラインから呼び出されると、python -m pickletools
は1つ以上のpickleファイルの内容を逆アセンブルします。 ピクルス形式の詳細ではなく、ピクルスに格納されているPythonオブジェクトを表示する場合は、代わりに-m pickle
を使用することをお勧めします。 ただし、調べたいピクルスファイルが信頼できないソースからのものである場合、-m pickletools
はピクルスバイトコードを実行しないため、より安全なオプションです。
たとえば、ファイル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
コマンドラインオプション
- -a, --annotate
- 各行に短いオペコードの説明で注釈を付けます。
- -o, --output=<file>
- 出力を書き込むファイルの名前。
- -l, --indentlevel=<num>
- 新しいMARKレベルをインデントするための空白の数。
- -m, --memo
- 複数のオブジェクトを分解する場合は、分解の合間にメモを保存してください。
- -p, --preamble=<preamble>
- 複数のpickleファイルが指定されている場合は、各逆アセンブリの前に指定されたプリアンブルを印刷します。
プログラムインターフェイス
- pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)
ピクルスのシンボリック逆アセンブリをファイルのようなオブジェクト out に出力します。デフォルトは、
sys.stdout
です。 pickle は、文字列またはファイルのようなオブジェクトにすることができます。 memo は、ピクルスのメモとして使用されるPython辞書にすることができます。 同じピッカーによって作成された複数のピクルス間で分解を実行するために使用できます。 ストリーム内のMARK
オペコードで示される連続するレベルは、 indentlevel スペースでインデントされます。 annotate にゼロ以外の値が指定されている場合、出力の各オペコードには簡単な説明が注釈として付けられます。 annotate の値は、注釈を開始する列のヒントとして使用されます。バージョン3.2の新機能: annotate 引数。
- pickletools.genops(pickle)
- ピクルス内のすべてのオペコードにイテレータを提供し、
(opcode, arg, pos)
トリプルのシーケンスを返します。 opcode はOpcodeInfo
クラスのインスタンスです。 arg は、Pythonオブジェクトとして、オペコードの引数のデコードされた値です。 pos は、このオペコードが配置されている位置です。 pickle は、文字列またはファイルのようなオブジェクトにすることができます。
- pickletools.optimize(picklestring)
- 未使用の
PUT
オペコードを削除した後、新しい同等のピクルス文字列を返します。 最適化されたピクルスはより短く、送信時間が短く、必要な保管スペースが少なく、より効率的にピクルスを外します。