Python Serial函数返回不完整的项列表。

时间:2013-08-05 20:44:13

标签: python serial-port

我有一个功能,它将命令发送到串行端口上连接的设备,然后保存到ini文件。但是,我发现它还没有返回所有的行。以下是代码:

    def get_config():
        config.read("config/map.ini")
        ser = serial.Serial(3)
        ser.write(bytes("D" + '\r\n', encoding='ascii'))
        time.sleep(1)
        while ser.inWaiting() > 0:
            r = ser.readline()
            r = r.decode('UTF-8').replace('\r\n', '')
            r = r.split()
            print("map", r[0], r[1].replace('V', ''))

        f = open("config/map.ini", "w")
        config.write(f)
        ser.close()

这是返回的内容:

    001 = 013
    002 = 015
    003 = 028
    004 = 027
    005 = 015
    ... (save space)
    070 = 013

当使用Putty发送“D”命令时,我得到上面的列表,但实际上,列表应该一直到'112 = ###'。是否有一些我缺少的东西让输出停止了一半?

1 个答案:

答案 0 :(得分:0)

你只是获取睡眠时间内到达的数据以及一旦你被赶上来阅读事物的时间inWaiting将返回0,即使路上还有更多的角色 - 你需要继续尝试阅读,直到某个时间限制或直到消息字符结束 - 可能两者兼而有之。尝试:

def get_config():
    config.read("config/map.ini")
    ser = serial.Serial(3)
    ser.write(bytes("D" + '\r\n', encoding='ascii'))
    time.sleep(1)
    while ser.inWaiting() > 0:
        r = ser.readline()
        r = r.decode('UTF-8').replace('\r\n', '')
        r = r.split()
        config.set("map", r[0], r[1].replace('V', ''))
        time.sleep(0.01)

    f = open("config/map.ini", "w")
    config.write(f)
    ser.close()

这不是理想的,但应该确认这是问题所在。