pickletools
— Tools for pickle developers¶
Вихідний код: 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
. Оптимізоване маринування коротше, займає менше часу на передачу, вимагає менше місця для зберігання та ефективніше знімає травлення.