从串行连接读取几行直到满足条件,然后允许串行写入操作

时间:2015-01-15 03:04:07

标签: python serial-port pyserial serial-communication

这是我目前的代码,它似乎不能很好地处理写入。这似乎是口吃。

import serial

ser = serial.Serial(port='/dev/tty1', baudrate=115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1)

while True:
    line = ser.readline() 
    print line,

    if line == "":
        var = raw_input()

        if var != "":
            ser.write(var)    

我正在尝试阅读几段文字,每个段落分隔一个空行。当读取所有段落时,我的pyserial脚本将向串行通道写入命令,然后将读取更多段落,依此类推。

我该如何改进?

--- EDIT ---------

而不是raw_input(),我现在使用select。现在可以写入串行通道了。 但对于阅读,不知何故它只是拒绝阅读/打印最后一段。

有人可以帮忙吗?

import serial
import select
import sys

ser = serial.Serial(port='/dev/tty1', baudrate=115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1)

while True:

    line = ser.readline()
    print line,

    while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
        lineIn = sys.stdin.readline()
        if lineIn:
            ser.write(lineIn)       
    else:
        continue

1 个答案:

答案 0 :(得分:1)

为什么不跟进乔丹比斯利的建议?

import serial

ser = serial.Serial(
    port='/dev/tty1',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    timeout=1)

while True:
    line = ser.readline()
    if not line.strip():  # evaluates to true when an "empty" line is received
        var = raw_input()
        if var:
            ser.write(var)
    else:
        print line,

比在while构造中绑定sys.stdin更加pythonic和可读... O_o