pickletools
— Tools for pickle developers¶
Вихідний код: Lib/pickletools.py
Цей модуль містить різні константи, що стосуються інтимних деталей модуля pickle
, деякі розлогі коментарі щодо реалізації та кілька корисних функцій для аналізу маринованих даних. Вміст цього модуля корисний для розробників ядра Python, які працюють над pickle
; звичайні користувачі модуля pickle
, ймовірно, не знайдуть модуль pickletools
доречним.
Використання командного рядка¶
Нове в версії 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: The annotate argument.
-
pickletools.
genops
(pickle)¶ Надає iterator для всіх кодів операцій у pickle, повертаючи послідовність
(opcode, arg, pos)
потрійок. opcode є екземпляром класуOpcodeInfo
; arg — це декодоване значення аргументу коду операції як об’єкт Python; pos - це позиція, у якій знаходиться цей код операції. pickle може бути рядком або файлоподібним об’єктом.
-
pickletools.
optimize
(picklestring)¶ Повертає новий еквівалентний рядок pickle після видалення невикористаних кодів операцій
PUT
. Оптимізоване маринування коротше, займає менше часу на передачу, вимагає менше місця для зберігання та ефективніше знімає травлення.