2015-09-22 4 views
1

Я новичок в python и у меня проблемы с работой моего кода.Метод вызова из модуля

У меня есть два разных модуля, в модуле a.py. Я помещаю все свои методы в модуль b.py. Я ставил логику.

Я использую среду разработки Sypder.

# module a 
import serial 
ser = serial.Serial() 
def serWrite (str): 
    ser.write (str + "\x0D") 
    print "Write data :", str + "\x0D" 
    time.sleep(0.1) 
    return 

def configuration(): 
    flagAT = 0 
    while (flagAT == 0): 
     serWrite("at") 
     while True: 
      ok = ser.readline() 
      if (ok[0:2] == "OK"): 
       print ("AT OK, DEVICE CONNECTED" + "\x0D") 
       flagAT = 1 
       break 
      else: 
        print "DEVICE NOT CONNECTED OR NOT WORKING" 

        break 
    print("Starting with configuration") 

Модуль b.py:

#module b 
import serial 
import a 

ser = serial.Serial() 
ser.port = "/dev/ttyS1" 
ser.baudrate = 115200 
### more serial configuration here### 

try: 
    ser.open() 
except Exception, e: 
    print "error open serial port: " + str(e) 
    exit() 

configuration() 

Теперь вопрос: При запуске модуля b.py после запуска a.py ВНУТРИ Spyder все работает как задумано.

НО: анализ кода Spyder говорит мне

'a' imported but unused 

Когда я пытаюсь вызвать модуль b.py ВНЕ Spyder Я получаю следующее сообщение об ошибке

[email protected](none) ~/WorkingDirectory $ python b.py 
Traceback (most recent call last): 
File "b.py", line 83, in <module> 
configuration() 
NameError: name 'configuration' is not defined 

Импорт конфигурации() с:

import a 
a.configuration() 

Дает следующую ошибку:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile 
execfile(filename, namespace) 
File "/home/workingDirectory/test.py", line 85,  in <module> 
a.configuration() 
File "a.py", line 336, in configuration 
serWrite("at") 
File "a.py", line 16, in serWrite 
ser.write (str + "\x0D") 
File "build/bdist.linux-i686/egg/serial/serialposix.py", line 490, in write 
serial.serialutil.SerialException: Attempting to use a port that is not open 

Я не понимаю, почему моя программа работает в spyder без проблем, но не снаружи. Может кто-нибудь помочь здесь?

+0

Вам нужно 'от импорта configuration' в модуле б. Spyder не вызвал ошибку, потому что вы выполнили два сценария в ** том же ** интерпретаторе. –

+0

@HuazuoGao Разве это не так, как 'import a', а затем' a.configuration() '(который, по его словам, он делал в вопросе)? –

+0

@HuazuoGao это возвращает ту же ошибку, что и 'import a' – moatze

ответ

2

Вы должны изменить модуль б на:

#module b 
import serial 
from a import ser, configuration 

#ser = serial.Serial() 
ser.port = "/dev/ttyS1" 
ser.baudrate = 115200 
### more serial configuration here### 

try: 
    ser.open() 
except Exception, e: 
    print "error open serial port: " + str(e) 
    exit() 

configuration() 
+0

Большое спасибо! Это очень помогло мне – moatze

Смежные вопросы