如何在python脚本之间共享变量

时间:2015-08-03 04:17:28

标签: python

我无法在不同的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

1 个答案:

答案 0 :(得分:0)

您需要某种形式的共享存储空间。你可以使用(取决于你在做什么):

  1. 队列或管道(documentation)。

  2. 共享内存(documentation)。

  3. 第三个独立存储,如文件(可以使用json或pickle来序列化对象),memcache,redis,sqlite或数据库。

  4. 关键在于这不是微不足道的,您需要(根据应用程序)决定哪个选项适合您。