Python 从模块调用方法

Python 从模块调用方法,python,methods,import,serial-port,spyder,Python,Methods,Import,Serial Port,Spyder,我是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)

我是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()
现在谈谈这个问题: 在Spyder内部运行a.py之后运行模块b.py时,一切都正常工作

但是:Spyder代码分析告诉我

'a' imported but unused
当我尝试在Spyder外部调用模块b.py时,我得到以下错误

pi@(none) ~/WorkingDirectory $ python b.py
Traceback (most recent call last):
File "b.py", line 83, in <module>
configuration()
NameError: name 'configuration' is not defined
给出以下错误:

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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/dist packages/spyderlib/widgets/externalshell/sitecustomize.py”,第540行,在runfile中
execfile(文件名、命名空间)
文件“/home/workingDirectory/test.py”,第85行,在
a、 配置()
配置中第336行的文件“a.py”
serWrite(“at”)
文件“a.py”,第16行,在serWrite中
ser.write(str+“\x0D”)
写入文件“build/bdist.linux-i686/egg/serial/serialposix.py”,第490行
serial.serialutil.SerialException:尝试使用未打开的端口
我不明白为什么我的程序在spyder内部运行没有问题,而在外部运行没有问题。
有人能帮忙吗

您需要将模块b更改为:

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

您需要从模块b中的导入配置
。Spyder没有产生错误,因为您在同一个解释器中执行了两个脚本。@HuazuoGao不等于
import a
然后
a.configuration()
(他说他在问题中这么做了)?@HuazuoGao这返回的错误与
import a
非常感谢!这对我帮助很大
#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()