# `pickletools` — 피클 개발자를 위한 도구

소스 코드: Lib/pickletools.py

이 모듈은 `pickle` 모듈의 깊은 세부 사항과 관련된 다양한 상수, 구현에 대한 긴 주석, 그리고 피클 된 데이터를 분석하기 위한 몇 가지 유용한 함수를 포함합니다. 이 모듈의 내용은 `pickle`에서 작업하는 파이썬 코어 개발자에게 유용합니다; 아마도 `pickle` 모듈의 일반 사용자는 `pickletools` 모듈을 적절한 용도를 찾지 못할 것입니다.

## 명령 줄 사용법

버전 3.2에 추가.

명령 줄에서 호출될 때, `python -m pickletools`는 하나 이상의 피클 파일의 내용을 역 어셈블합니다. 피클 형식의 세부 사항이 아닌 피클에 저장된 파이썬 객체를 보려면, 대신 `-m pickle`을 사용하는 것이 좋습니다. 그러나, 검사하려는 피클 파일이 신뢰할 수 없는 소스에서 왔을 때, 피클 바이트 코드를 실행하지 않으므로 `-m pickletools`가 더 안전한 옵션입니다.

예를 들어, 튜플 `(1, 2)`가 파일 `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

### 명령 줄 옵션

-a, --annotate

  각 줄에 짧은 opcode 설명으로 주석을 답니다.

-o, --output=<file>

  출력이 기록되어야 하는 파일의 이름.

-l, --indentlevel=<num>

  새 MARK 수준을 들여쓰기하는 공백의 수.

-m, --memo

  여러 객체가 역 어셈블될 때, 역 어셈블리 간에 메모를 보존합니다.

-p, --preamble=<preamble>

  하나 이상의 피클 파일이 지정될 때, 각 역 어셈블리 전에 주어진 프리앰블을 인쇄합니다.

## 프로그래밍 인터페이스

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

  피클의 기호적인 역 어셈블리를 기본값이 `sys.stdout`인 파일류 객체 out으로 출력합니다. pickle는 문자열이나 파일류 객체가 될 수 있습니다. memo는 피클의 메모로 사용될 파이썬 딕셔너리일 수 있습니다; 같은 피클러로 만들어진 여러 피클에 걸쳐 역 어셈블리를 수행하는 데 사용할 수 있습니다. 스트림의 `MARK` 옵코드로 표시된 연속 수준은 indentlevel개의 스페이스로 들여쓰기 됩니다. 0이 아닌 값이 annotate에 주어지면, 출력의 각 옵코드에 짧은 설명이 주석으로 표시됩니다. annotate 값은 주석을 시작해야 하는 열의 힌트로 사용됩니다.

  버전 3.2에서 변경: Added the annotate parameter.

pickletools.genops(pickle)

  피클의 모든 옵코드에 대해 `(opcode, arg, pos)` 트리플을 반환하는 이터레이터를 제공합니다. opcode는 `OpcodeInfo` 클래스의 인스턴스입니다; arg는 옵코드 인자의 파이썬 객체로 디코딩된 값입니다; pos는 이 옵코드의 위치입니다. pickle은 문자열이나 파일류 객체가 될 수 있습니다.

pickletools.optimize(picklestring)

  사용되지 않는 `PUT` 옵코드를 제거한 후 새로운 동등한 피클 문자열을 반환합니다. 최적화된 피클은 더 짧고, 전송 시간이 덜 걸리며, 저장 공간이 덜 필요하고, 역 피클이 더 효율적입니다.