2015-02-06 70 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''' 
要提取从你的输出中只有两行
相关问题