2013-10-18 51 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)