2015-02-06 67 views
-1

我想從AT命令的輸出中讀取兩行並在python中執行INSERT INTO TABLE VALUES。 AT的輸出總是在兩行中,但它是一個序列,與打開的文件不同,讀取它直到下一個限制器,但我們必須等待。從AT命令的輸出中讀取(兩行或更多行)並將其寫入數據庫

反正這是我的代碼:

class SMSWait(self): 
    def run(self): 
     self.open() 
     while self.ser.isOpen(): 
       time.sleep(1) 
       SMSRead = 'AT+CMGL="ALL"\r\n' 
       self.SendCommand(SMSRead, getline=True) 

       while self.ser.inWaiting() > 0: 
        **data = self.ser.readall() 
        print data** 
    def open(self): 
     self.ser = serial.Serial('/dev/ttyUSB0', baudrate=115200, timeout=.1, rtscts=0) 
     self.SendCommand('AT\r') 
     self.SendCommand('AT+CMGF=1\r') 
     self.ser.flushInput() 
     self.ser.flushOutput() 
    def SendCommand(self,command, getline=True): 
     self.ser.write(command) 
     data = '' 
     if getline: 
      data = self.ReadLine() 
      data = filter(None, data) 
     return data 

    def ReadLine(self): 
     data = self.ser.readline() 
     return data 

它會顯示輸出:

AT+CMGL="ALL" 

+CMGL: 2,"REC READ","+60xxxxxxxxx",,"15/02/05,14:13:47+28" 
mydata43414242453564567578689789done 

OK 
現在

,我要如何處理這個 「序」 的輸出,而忽略AT + CMGL =「ALL 「和」確定「,並在一個查詢中使用」插入「將它們放入數據庫。我沒有使用python訪問數據庫的問題。和我正確的正則表達式。也許有人可以幫助我邏輯或腳本。謝謝

+0

處理來自列表值一個數據?忽略AT + CMGL =「ALL」和「OK」 – 2015-02-08 15:25:07

回答

0

我明白了。似乎我必須將所有這些行放入列表中並對其進行排序,然後將這兩行減少爲1行。檢查出來

class SMSWait(self): 
def run(self): 
    self.open() 
    while 1: 
     SMSRead = 'AT+CMGL="ALL"\r\n' 
     self.SendCommand(SMSRead, getline=True) 
     data = self.ser.readall() 
     time.sleep(2) 
     datalist.append(data) 
     if any('+CMGL:' in d for d in datalist): 
      if 'AT' in datalist: datalist.remove['AT'] 
      if any('\r\n' in d for d in datalist): datalist = [d.replace('\r\n', '') for d in datalist] 
      if any('\r' in d for d in datalist): datalist = [d.replace('\r', '') for d in datalist] 
      if any('\n' in d for d in datalist): datalist = [d.replace('\n', '') for d in datalist] 
      if any('OK' in d for d in datalist): datalist = [d.replace('OK', '') for d in datalist] 
      datalist = filter(None, datalist) 
      split_data = datalist[0].split('+CMGL: ') 
      split_data = filter(None, split_data) 

然後從這裏我們可以開始一個

   for s in split_data: 
       '''your code here''' 
要提取從你的輸出中只有兩行
相關問題