pickletools — Інструменти для розробників pickle

Вихідний код: Lib/pickletools.py


Цей модуль містить різні константи, що стосуються інтимних деталей модуля pickle, деякі розлогі коментарі щодо реалізації та кілька корисних функцій для аналізу маринованих даних. Вміст цього модуля корисний для розробників ядра Python, які працюють над pickle; звичайні користувачі модуля pickle, ймовірно, не знайдуть модуль pickletools доречним.

Використання командного рядка

Added in version 3.2.

При виклику з командного рядка python -m pickletools розбере вміст одного або кількох файлів pickle. Зауважте, що якщо ви хочете бачити об’єкт Python, який зберігається в pickle, а не деталі формату pickle, ви можете замість цього використовувати -m pickle. Однак, якщо файл pickle, який ви хочете перевірити, походить із ненадійного джерела, -m pickletools є безпечнішим варіантом, оскільки він не виконує байт-код pickle.

Наприклад, з кортежем (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

Додайте до кожного рядка короткий опис коду операції.

-o, --output=<file>

Ім’я файлу, куди слід записати вихідні дані.

-l, --indentlevel=<num>

Кількість пробілів, на які потрібно відступити новий рівень MARK.

-m, --memo

Коли кілька об’єктів розібрано, зберігайте пам’ятку між розбираннями.

-p, --preamble=<preamble>

Якщо вказано більше одного файлу pickle, друкуйте надану преамбулу перед кожним розбиранням.

Програмний інтерфейс

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

Виводить символічне розбирання pickle у файлоподібний об’єкт out, за умовчанням sys.stdout. pickle може бути рядком або файлоподібним об’єктом. memo може бути словником Python, який використовуватиметься як пам’ятка pickle; його можна використовувати для розбирання кількох маринованих пікселів, створених одним піклером. Послідовні рівні, позначені кодами операцій MARK у потоці, відступають пробілами indentlevel. Якщо для annotate задано ненульове значення, кожен код операції у виведених даних анотується коротким описом. Значення annotate використовується як підказка для стовпця, з якого має починатися анотація.

Змінено в версії 3.2: Added the annotate parameter.

pickletools.genops(pickle)

Надає iterator для всіх кодів операцій у pickle, повертаючи послідовність (opcode, arg, pos) потрійок. opcode є екземпляром класу OpcodeInfo; arg — це декодоване значення аргументу коду операції як об’єкт Python; pos - це позиція, у якій знаходиться цей код операції. pickle може бути рядком або файлоподібним об’єктом.

pickletools.optimize(picklestring)

Повертає новий еквівалентний рядок pickle після видалення невикористаних кодів операцій PUT. Оптимізоване маринування коротше, займає менше часу на передачу, вимагає менше місця для зберігання та ефективніше знімає травлення.