我无法在不同的python脚本中访问变量。
我有三个脚本:shared.py test1.py test2.py
在shared.py
中,我定义了一个字典devices
并对其进行了初始化。
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
有没有办法可以访问devices
中更新的test2.py
?提前谢谢。
UPDATE1: 我根据link的类似解决方案更改了我的shared.py test1.py和test2.py,然后添加了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
我按以下顺序执行脚本:
python test1.py(罚款)
python test2.py(罚款)
python test3.py(这给了我一个错误:" AttributeError:'模块'对象没有属性'设备'")
UPDATE2:
使我的问题更加现实。我有一个login.py
,它接受一些参数并试图连接到一个开关
例如:
python login.py --ip 10.1.1.1 --username admin --password admin
# 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
# 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
?
答案 0 :(得分:0)
您需要某种形式的共享存储空间。你可以使用(取决于你在做什么):
队列或管道(documentation)。
共享内存(documentation)。
第三个独立存储,如文件(可以使用json或pickle来序列化对象),memcache,redis,sqlite或数据库。
关键在于这不是微不足道的,您需要(根据应用程序)决定哪个选项适合您。