我写了一些python代码来控制一些USB(电气继电器和温度传感器)和RS232(真空计)设备。在这个主要脚本中(例如,myscript.py
),我想导入一个模块(例如,exp_protocols.py
),其中我定义了不同的实验协议,即一系列打开或关闭继电器的指令,读取温度和压力值,流入控制(例如“等到温度超过200摄氏度”)。从模块内部访问全局变量
我最初的尝试是这样的:
switch_A = Relay('A')
switch_B = Relay('B')
gauge_1 = Gauge('1')
global switch_A
global switch_B
global gauge_1
from exp_protocols import my_protocol
my_protocol()
与exp_protocols.py
看起来像这样:
def my_protocol():
print 'Pressure is %.3f mbar.' % gauge_1.value
switch_A.close()
switch_B.open()
它输出一个全局变量错误,因为exp_protocols.my_protocol
不能访问myscript.py
定义的对象。
看来,从这里阅读答案前面的问题,我可以(应该?)在另一个模块中创建所有我Relay
和Gauge
变量,例如,myconfig.py
,然后import myconfig
无论是在myscript.py
和exp_protocols
?但是如果我这样做,我的Relay
和Gauge
对象是不是会创建两次(因此试图打开已激活的串行端口等)?
什么是实现这种模块间通信的最佳方式(大多数是Pythonic)?
在此先感谢。
为什么不会将'switch_A','switch_B'和'gauge_1'作为函数参数传递给'my_protocol'? – 2014-10-01 20:44:20