У меня возникли проблемы с получением переменных, доступных для разных скриптов python. У меня есть три сценария: shared.py test1.py test2.py
В shared.py
я определяю словарь devices
и инициализирую его.Как обменять переменные между скриптами python
devices = {}
В test1.py
я импортировать shared.py
и добавить значение в devices
import shared
shared.devices['item1': 'item1']
В test2.py
, я импортировать shared.py
и попытаться напечатать обновленный devices
в shared.py
import shared
print shared.devices
Вместо печать обновленного значения дает мне пустой словарь. Я понимаю, что когда я импортировал shared
в test2.py
, коды shared.py
выполняются снова, так что приводит к повторной инициализации devices
Есть ли способ, что я могу получить доступ в test2.py
обновленного devices
? Заранее спасибо.
Update1: я изменил свой shared.py test1.py и test2.py в соответствии с аналогичным решением от link, а затем добавил test3.py
# shared.py
def init():
global devices
devices = {}
# test1.py
import shared
def add(key, value):
shared.devices[key] = value
# test2.py
import shared
import test1.py
shared.init()
test1.add('key1', 'value1')
print shared.devices
# test3.py
import shared
print shared.devices
Я выполнил сценарии в следующем порядке :
питон test1.py (отлично)
питон test2.py (отлично)
питон test3.py (который дает мне ошибку: "AttributeError: 'модуль' объект не имеет атрибута" устройств")
UPDATE2: Чтобы сделать мой вопрос более реалистичным. У меня есть login.py
, который принимает несколько аргументов и пытается подключиться к коммутатору.
Например:
Python login.py --ip 10.1.1.1 --username администратор --password администратор
# login.py - pseudocode
switch = Switch() #create an object of Router class
switch.connect(ip, username, password) #take the arguments from the command line and try to connect to a router
switch_dict[admin] = switch #add switch instance to a shared dictionary switch_dict, which will be used by over scripts as well.
После подключения к коммутатору, я после этого нужно выполнить еще один сценарий vlan.py
для создания виртуальной локальной сети на этом коммутаторе
# vlan.py - pseudocode
# first I need to get the switch that was created by admin, not other users
my_switch = switch_dict['admin']
# Then I can perform some configuration on vlan
my_switch.createvlan()
проблема заключается в том, как я могу создать и сохранить словарь switch_dict
, который может быть общим и доступ другие сценарии ??
Я не уверен, что это только для понимания, но если вы делаете это в реальном коде, вам, вероятно, следует подумать о другой архитектуре. –
Возможное дублирование: http://stackoverflow.com/questions/13034496/using-global-variables-between-files-in-python –
@SlaterTyranus Любые предложения? –