Как я могу сохранить все переменные на текущей сессии Python?

Я хочу сохранить все переменные в своей текущей среде Python. Кажется, что одна опция состоит в том, чтобы использовать модуль 'рассола'. Однако я не хочу делать это по 2 причинам:

1) Я должен назвать pickle.dump () для каждой переменной
2) Когда я хочу получить переменные, я должен помнить порядок, в котором я сохранил переменные, и затем сделайте pickle.load () для получения каждой переменной.

Я ищу некоторую команду, которая сохранила бы всю сессию, так, чтобы, когда я загружаю эту сохраненную сессию, все мои переменные были восстановлены. Действительно ли это возможно?

Большое спасибо!
Gaurav

Править: Я предполагаю, что не возражаю называть pickle.dump () для каждой переменной, которую я хотел бы сохранить, но запоминание точного порядка, в котором были сохранены переменные, походит на большое ограничение. Я хочу избежать этого.

78
задан user10 2 June 2010 в 19:24
поделиться

2 ответа

Если вы используете полку , вам не нужно запоминать порядок, в котором обрабатываются объекты, поскольку полка дает вам объект, похожий на словарь:

Чтобы отложить вашу работу:

import shelve

T='Hiya'
val=[1,2,3]

filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new

for key in dir():
    try:
        my_shelf[key] = globals()[key]
    except TypeError:
        #
        # __builtins__, my_shelf, and imported modules can not be shelved.
        #
        print('ERROR shelving: {0}'.format(key))
my_shelf.close()

Чтобы восстановить:

my_shelf = shelve.open(filename)
for key in my_shelf:
    globals()[key]=my_shelf[key]
my_shelf.close()

print(T)
# Hiya
print(val)
# [1, 2, 3]
71
ответ дан 24 November 2019 в 10:36
поделиться

Вы пытаетесь перевести процесс в спящий режим. Это уже обсуждалось . Вывод состоит в том, что при попытке решить эту проблему существует несколько труднопреодолимых проблем. Например, с восстановлением дескрипторов открытых файлов.

Лучше подумать о подсистеме сериализации / десериализации для вашей программы. Во многих случаях это нетривиально, но в долгосрочной перспективе это гораздо лучшее решение.

Хотя если я и преувеличил проблему. Вы можете попробовать выбрать глобальные переменные dict . Используйте globals () для доступа к словарю. Поскольку он индексируется по имени переменной, вам не нужно беспокоиться о порядке.

2
ответ дан 24 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: