我有一个循环,它将命令写入调制解调器,然后读取调制解调器,直到找到“OK”或“ERROR”。循环工作;一旦。出于某种原因,一旦循环第一次结束,它就会中断。这是代码:
for modem in ser:
for port in modem:
print port.name
port.write('ati\r\n')
a=port.read(size=2000)
a=a.splitlines()
t=False
while t!=True:
for line in a:
print line
if line=='OK' or line=='ERROR' or '$GP' in line:
t=True
print 'howdy ho diddly doo'
我也像这样制作了while循环:
while True:
for line in a:
print line
if line=='OK' or line=='ERROR' or '$GP' in line:
t=True
if t==True:
break
但是,对于这两个版本,结果如下:
COM71
ati
Manufacturer: Sierra Wireless, Incorporated
Model: MC8705
Revision: T3_5_2_1AP R517 CNSZXD00000128 2012/02/07 13:03:25
IMEI: 353567040568900
IMEI SV: 5
FSN: CC30942172510
3GPP Release 7
+GCAP: +CGSM,+FCLASS,+DS
OK
howdy ho diddly doo
>>> len(Ports) #Ports is ser (the list that I pass through for the function)
4
>>>
我肯定知道ser的长度大于1,并且循环应该运行不止一次。我做错了什么?
答案 0 :(得分:0)
看看你的内部while
循环:
a=port.read(size=2000)
a=a.splitlines()
t=False
while t!=True:
for line in a:
print line
if line=='OK' or line=='ERROR' or '$GP' in line:
t=True
您迭代a
的行,并将t
标志设置为True
,如果其中一行是“OK”,“ERROR”或喜欢。但是,在for
循环的每次迭代中,a
循环遍历相同的行while
!因此,while
循环在第一次迭代后停止,如果第一组行满足条件,或者遇到无限循环。
可能你错过了a=port.read(size=2000)
循环中的另一个while
。