pickletools — pickle 개발자를 위한 도구
pickletools — pickle 개발자를 위한 도구
소스 코드: Lib/pickletools.py
이 모듈은 pickle 모듈의 면밀한 세부 사항과 관련된 다양한 상수, 구현에 대한 긴 주석 몇 개, 그리고 pickle된 데이터를 분석하는 데 유용한 함수 몇 개를 담고 있어요. 이 모듈의 내용은 pickle을 작업하는 Python 핵심 개발자에게 유용해요. pickle 모듈의 일반 사용자라면 pickletools 모듈이 별로 관련 없을 거예요.
출처: Python 표준 라이브러리
본문
명령줄 사용법 (Command-line usage)
버전 3.2에 추가.
명령줄에서 python -m pickletools를 호출하면 하나 이상의 pickle 파일의 내용을 역어셈블(disassemble)해요. pickle에 저장된 Python 객체를 보고 싶다면 pickle 포맷의 세부 사항이 아니라 -m pickle을 사용하고 싶을 거예요. 다만 조사하려는 pickle 파일이 신뢰할 수 없는 소스에서 온 것이라면, -m pickletools가 pickle 바이트코드를 실행하지 않으므로 더 안전한 선택이에요.
예를 들어 파일 x.pickle에 tuple (1, 2)가 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
명령줄 옵션 (Command-line options)
-a,--annotate— 각 줄에 짧은 opcode 설명을 주석으로 단다.-o,--output=<file>— 출력을 쓸 파일의 이름.-l,--indentlevel=<num>— 새MARK레벨을 들여쓸 공백 수.-m,--memo— 여러 객체를 역어셈블할 때 역어셈블 사이에 memo를 유지한다.-p,--preamble=<preamble>— pickle 파일이 하나 이상 지정되면 각 역어셈블 앞에 주어진 머리말을 출력한다.pickle_file— 읽을 pickle 파일. 또는 표준 입력에서 읽는다는 뜻의-.
프로그래밍 인터페이스 (Programmatic interface)
pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)
pickle의 기호 역어셈블(symbolic disassembly)을 파일류 객체 out에 출력하며, 기본값은 sys.stdout이에요. pickle은 문자열 또는 파일류 객체일 수 있어요. memo는 pickle의 memo로 사용될 Python 사전일 수 있으며, 같은 pickler가 만든 여러 pickle에 걸쳐 역어셈블을 수행하는 데 사용할 수 있어요. 스트림의 MARK opcode로 표시되는 연속 레벨은 indentlevel개의 공백으로 들여써져요. annotate에 0이 아닌 값이 주어지면 출력의 각 opcode에 짧은 설명이 주석으로 붙어요. annotate의 값은 주석이 시작되어야 할 열에 대한 힌트로 사용돼요.
버전 3.2에서 변경: annotate 매개변수 추가.
pickletools.genops(pickle)
pickle의 모든 opcode에 대한 이터레이터를 제공하며, (opcode, arg, pos) 3-튜플의 시퀀스를 돌려줘요. opcode는 OpcodeInfo 클래스의 인스턴스이고, arg는 opcode 인자의 디코딩된 값(Python 객체)이며, pos는 이 opcode가 위치한 자리예요. pickle은 문자열 또는 파일류 객체일 수 있어요.
pickletools.optimize(picklestring)
사용되지 않는 PUT opcode를 제거한 뒤 동등한 새 pickle 문자열을 돌려줘요. 최적화된 pickle은 더 짧고, 전송 시간이 덜 들고, 저장 공간도 덜 차지하며, 더 효율적으로 언피클링돼요.