Python 用pyserial与modem通信

Python 用pyserial与modem通信,python,serial-port,modem,pyserial,Python,Serial Port,Modem,Pyserial,我没有找到一个合理的好例子,说明如何使用pyserial与串行调制解调器通信。我已经创建了一个代码片段,在给定一个实例化的pyserial对象ser的情况下,它应该执行以下操作: 向调制解调器发送AT命令 尽快返回调制解调器应答 返回,例如在超时的情况下返回None 处理脚本和调制解调器之间的通信最合理、可靠和简单 以下是片段: def send(cmd, timeout=2): # flush all output data ser.flushOutput() # init

我没有找到一个合理的好例子,说明如何使用pyserial与串行调制解调器通信。我已经创建了一个代码片段,在给定一个实例化的pyserial对象
ser
的情况下,它应该执行以下操作:

  • 向调制解调器发送AT命令
  • 尽快返回调制解调器应答
  • 返回,例如在超时的情况下返回None
  • 处理脚本和调制解调器之间的通信最合理、可靠和简单
以下是片段:

def send(cmd, timeout=2):

  # flush all output data
  ser.flushOutput()

  # initialize the timer for timeout
  t0 = time.time()
  dt = 0

  # send the command to the serial port
  ser.write(cmd+'\r')

  # wait until answer within the alotted time
  while ser.inWaiting()==0 and time.time()-t0<timeout:
    pass

  n = ser.inWaiting()
  if n>0:
    return ser.read(n)
  else:
    return None
def发送(cmd,超时=2):
#刷新所有输出数据
ser.flushOutput()
#初始化超时计时器
t0=时间。时间()
dt=0
#将命令发送到串行端口
ser.write(cmd+'\r')
#在指定时间内等待答复
而ser.inWaiting()==0和time.time()-t00:
返回序列读取(n)
其他:
一无所获
我的问题:这是好的、健壮的代码,还是可以更改/简化代码片段?我特别不喜欢
read(n)
方法,我希望pyserial提供一段只返回整个缓冲区内容的代码。另外,我是否应该在开始时刷新输出,以避免在开始之前输出缓冲区中出现一些垃圾

谢谢
Alex

创建串行对象,参数为读取超时时间
timeout=2

Mi配方是:

def send(data):
    try:
        ser.write(data)
    except Exception as e:
        print "Couldn't send data to serial port: %s" % str(e)
    else:
        try:
            data = ser.read(1)
        except Exception as e:
            print "Couldn't read data from serial port: %s" % str(e)
        else:
            if data:  # If data = None, timeout occurr
                n = ser.inWaiting()
                if n > 0: data += ser.read(n)
                return data

我认为这是一种很好的管理串行端口通信的方式。

注意行尾,您确定
'\r'
是正确的行尾吗?通常是普通换行符(
'\n'
)或回车换行符(
'\r\n'
)。@Joachim:这是一个好问题,我无法回答。这应被视为问题的一部分。