-1

AT Command の出力から 2 行を読み取り、Python で INSERT INTO table VALUES を実行したいと考えています。AT の出力は常に 2 行ですが、ファイルを開いて次のリミッターまで読み取るのとは異なり、シーケンスですが、待つ必要があります。

とにかくこれは私のコードです:

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" と "OK" を無視して、1 つのクエリで "insert into" を使用してそれらをデータベースに配置するにはどうすればよいでしょうか。Pythonを使用してデータベースにアクセスすることに問題はありません。そして私は正規表現で大丈夫です。誰かが論理的またはスクリプト的に私を助けてくれるかもしれません。ありがとうございました

4

1 に答える 1

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)

次に、ここから、リスト値のデータを 1 つずつ処理し始めることができます

             for s in split_data:
                 '''your code here'''
于 2015-03-04T13:58:31.680 に答える