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에 추가: annotate 인자.

pickletools.genops(pickle)

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

pickletools.optimize(picklestring)

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