2014-10-01 3 views
0

나는 많은 USB (전기 릴레이 및 온도 센서)와 RS232 (진공 게이지) 장치를 제어하기 위해 파이썬 코드를 작성했습니다. 이 메인 스크립트 내에서 (예 : myscript.py), 나는 다른 실험 프로토콜, 즉 릴레이를 열고 닫고, 온도와 압력 값을 읽는 일련의 명령어를 정의하는 모듈 (예 : exp_protocols.py)을 가져오고 싶습니다. (예 : "온도가 200 ℃를 초과 할 때까지 대기").모듈 내부에서 전역 변수에 액세스하기

내 초기 시도는이처럼 보였다 : exp_protocols.py

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() 

는 다음과 같이보고 :

def my_protocol(): 
    print 'Pressure is %.3f mbar.' % gauge_1.value 
    switch_A.close() 
    switch_B.open() 

이 전역 변수 오류를 출력 exp_protocols.my_protocolmyscript.py에 정의 된 개체에 액세스 할 수 있기 때문입니다.

myconfig.py, 나는 (?한다) 예를 들어, 다른 모듈에있는 모든 내 RelayGauge 변수를 만들 수 있다는 것을, 여기에 그 이전의 질문에 대한 답변을 읽고, 것, 그리고 myscript.pyexp_protocols에서 다음 import myconfig 모두? 하지만 그렇게하면 RelayGauge 개체가 두 번 만들어지지 않습니다 (따라서 이미 활성화 된 직렬 포트를 열려고 시도하는 등)?

이러한 종류의 모듈 간 통신을 달성하는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

+0

이유 : 동일한 기능을 모두 처리 할 수있다, (... 그리고 난 당신이 데이터를 구성하는 방법 아무 생각이 없기 때문에 난 그냥이를 만들고 있어요) 당신이 목록에서 스위치 블록이 있다고 가정 'switch_A','switch_B','gauge_1'을 함수 매개 변수로'my_protocol'에 넘겨주지 않습니까? –

답변

1

import myconfig 몇 번이나 상관없이 파이썬은 모듈을 한 번만 가져옵니다. 첫 번째 가져 오기가 끝나면 이후의 import 문은 모듈에 대한 다른 참조를 가져옵니다.

글로발은 정적 데이터 비트 인 경우에만 사용해야합니다. 변수를 매개 변수로 사용하면 함수가 더 일반적입니다.

def my_protocol(switch_A, switch_B, gauge_1): 
    print 'Pressure is %.3f mbar.' % gauge_1.value 
    switch_A.close() 
    switch_B.open() 

모듈은 다양한 데이터 조합에서 사용할 수 있습니다.

import exp_protocols 

switch_blocks = [ 
    [Relay('1-A'), Relay('1-B'), Gauge('1-1')], 
    [Relay('2-A'), Relay('2-B'), Gauge('2-1')], 
] 

for switch1, switch2, gauge in switch_blocks:  
    exp_protocols.my_protocol(switch1, switch2, gauge) 
관련 문제