2015-02-06 2 views
-1

Я хочу прочитать две строки из вывода AT Command и сделать INSERT INTO таблицы VALUES в python. Выход 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 »и« ОК »и поместить их в базу данных, используя« insert into »в одном запросе. У меня нет проблем с доступом к базе данных с помощью python. и я в порядке с регулярным выражением. может быть, кто-то может помочь мне логично или сценарий. спасибо

+0

вы хотите извлечь только две строки из вашего выводе? игнорируя AT + CMGL = "ВСЕ" и "ОК" –

ответ

0

У меня есть. кажется, что я должен поместить все эти строки в список и отсортировать его, и уменьшить эти 2 строки до 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'''