2013-10-18 53 views
0

我有一个循环,它向调制解调器写入命令,并读取调制解调器直到找到'OK'或'ERROR'。循环工作;一旦。出于某种原因,只要循环第一次完成,就会中断。下面的代码:Python:嵌套循环没有按预期运行

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,并且循环应该运行多次。我究竟做错了什么?

+1

ser有几个调制解调器并不明显。尝试迭代服务器和输出调制解调器代理,并迭代每个调制解调器和输出端口名称。如果真的有一些项目在服务,那么我们有一些讨论。 – peroksid

+0

对''while循环嵌套'while'的思想是什么?除非我弄错了,否则while循环会无限运行,一次又一次循环'a',或者只循环一次。在每次迭代中,if条件是真或假;在这个循环中'a'永远不会改变! –

+0

@peroksid我编辑它以包含输出以及查询列表长度后。 – RageCage

回答

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”,“错误“等。但是,for循环在while循环的每次迭代中都会通过相同的一组行a!因此,在第一次迭代后,如果第一组线条满足条件,或者运行到无限循环,则循环停止。

可能是您在while循环内丢失了另一个a=port.read(size=2000)