2015-04-23 66 views
1

我用Python寫一個程序,它是這樣工作的X秒:超時在Python

  1. 採取措施,通過串口輸入字符串,當按回車鍵(回車 返回)
  2. 檢查$標誌存在作爲輸入的字符串的第一個字符,然後繼續

問題

如果我沒有得到Carriage Return CR並且在同一時間或特定的時間間隔後得到另一個字符串,可能會產生麻煩。 爲了避免這個問題,我想添加超時會話,如果回車沒有收到,那麼在特定的時間間隔之後,使之前的緩衝區Null

請仔細閱讀下面的代碼,並指導我如何在其中添加超時選項?

CODE

import serial 

x = [0,0,0] 
ser = serial.Serial('/dev/ttyAMA0', 9600) 
buffer = '' 
while True: 
    buffer += ser.read(ser.inWaiting()) 
    if '\n' in buffer: 
     if buffer[0] == '$': 
      x1 = buffer.rstrip() 
      x2= x1.split(",") 
      print((x2[0]),(x2[1]),(x2[2])) 
     buffer = "" 

回答

1

我以爲你只是需要在程序結束時添加這一行。 這條線將增加更多的60秒每次輸入正確的字符串

clear_buffer = time.time() + 60 

看看下面的編碼

import serial 
import time 

x = [0,0,0] 
ser = serial.Serial('/dev/ttyAMA0', 9600) 
buffer = '' 
clear_buffer = time.time() + 60 
while True: 
    if time.time() >= clear_buffer: 
     buffer = '' 
     clear_buffer = time.time() + 60 
    buffer += ser.read(ser.inWaiting()) 
    if '\n' in buffer: 
     if buffer[0] == '$': 
      x1 = buffer.rstrip() 
      x2= x1.split(",") 
      print((x2[0]),(x2[1]),(x2[2])) 
     buffer = "" 
     clear_buffer = time.time() + 60 
1

我可能讀了你的問題錯了,但它看起來好像你只是想在設定的時間量之後清除緩衝區字符串?這將每60秒清除一次:

import serial 
import time 

x = [0,0,0] 
ser = serial.Serial('/dev/ttyAMA0', 9600) 
buffer = '' 
clear_buffer = time.time() + 60 
while True: 
    if time.time() >= clear_buffer: 
     buffer = '' 
     clear_buffer = time.time() + 60 
    buffer += ser.read(ser.inWaiting()) 
    if '\n' in buffer: 
     if buffer[0] == '$': 
      x1 = buffer.rstrip() 
      x2= x1.split(",") 
      print((x2[0]),(x2[1]),(x2[2])) 
     buffer = "" 
+0

我在你上面的編碼問題,它有力地60秒後做會話超時.. 但我希望60秒後會話超時,如果它沒有收到回車 –