pickletools — pickle 개발자를 위한 도구

pickletools — pickle 개발자를 위한 도구

pickletools 모듈은 pickle 모듈의 세부 내부에 관한 다양한 상수, 구현에 관한 긴 주석, 그리고 피클 데이터를 분석하는 몇 가지 유용한 함수를 포함해요. 이 모듈의 내용은 pickle 을 작업하는 파이썬 핵심 개발자에게 유용해요. pickle 의 일반 사용자에게는 별로 관련이 없을 수도 있어요.

출처: Python documentation

본문

커맨드라인 사용법 (Command-line usage)

커맨드라인에서 호출하면 python -m pickletools 가 하나 이상의 pickle 파일의 내용을 역어셈블(disassemble)해요. pickle 에 저장된 파이썬 객체 자체를 보고 싶다면 -m pickle 를 사용하는 게 나을 수 있어요. 다만 신뢰할 수 없는 소스의 pickle 파일을 검사할 때는 -m pickletools 가 더 안전한데, pickle 바이트코드를 실행하지 않기 때문이에요.

예를 들어 파일 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

커맨드라인 옵션 (Command-line options)

  • -a, --annotate — 각 줄에 짧은 opcode 설명을 주석으로 달아요.
  • -o, --output= — 출력을 쓸 파일 이름.
  • -l, --indentlevel= — 새 MARK 레벨을 들여쓸 공백 수.
  • -m, --memo — 여러 객체를 역어셈블할 때 역어셈블 간에 memo 를 보존해요.
  • -p, --preamble= — pickle 파일이 여러 개면 각 역어셈블 앞에 주어진 preamble 을 출력해요.
  • pickle_file — 읽을 pickle 파일 또는 표준 입력을 나타내는 -.

프로그래매틱 인터페이스 (Programmatic interface)

  • pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0) — pickle 의 기호 역어셈블을 파일류 객체 out 에 출력해요(기본 sys.stdout). pickle 은 문자열 또는 파일류 객체일 수 있어요. memo 는 pickle 의 memo 로 사용할 파이썬 딕셔너리이며, 같은 피컬러가 만든 여러 pickle 에 걸친 역어셈블에 사용할 수 있어요. 스트림의 MARK opcode 로 표시되는 연속 레벨은 indentlevel 공백으로 들여써요. annotate 에 0이 아닌 값을 주면 각 opcode 를 짧은 설명으로 주석 처리해요. 버전 3.2에서 annotate 매개변수 추가.
  • pickletools.genops(pickle) — pickle 의 모든 opcode에 대한 이터레이터를 제공하며 (opcode, arg, pos) 트리플 시퀀스를 반환해요. opcodeOpcodeInfo 클래스 인스턴스, arg 는 opcode 인자의 디코딩된 값, pos 는 opcode 가 위치한 위치예요.
  • pickletools.optimize(picklestring) — 사용하지 않는 PUT opcode 를 제거한 뒤 동등한 새 pickle 문자열을 반환해요. 최적화된 pickle 은 더 짧아 전송 시간·저장 공간이 덜 들고 더 효율적으로 언피클돼요.

더 알아보기 (Learn more)