Python:串行端口和伪tty之间的异步读/写

时间:2017-09-15 07:40:43

标签: python pty

我正在尝试编写一个串行'代理',它将位于进程和物理串行设备之间,并在运行时重写一些命令。我让它以粗暴的方式工作,但它比直接进入物理设备慢得多。

为了加快速度,除了裸读/写之外,我已经删除了所有内容,但性能比预期慢得多。

任何想法我做错了什么?我对这个低级别的东西很新,我的大部分经验都是解析json / xml / etc和操作字符串。任何想法或提示都会非常感激。

继承简化代码 -

def host_thread( host_port, dv_port ):

    while True:
        try:
            char = os.read(host_port, 1)
            os.write(dv_port, char)
        except OSError as err:
            if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:
                pass
            else:
                raise  # something else has happened -- better reraise


def dv_thread( host_port, dv_port ):

    while True:
        try:
            char = os.read(dv_port, 1)
            os.write(host_port, char)
        except OSError as err:
            if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:
                pass
            else:
                raise  # something else has happened -- better reraise

if __name__ == "__main__":

    host_port, slave = pty.openpty()
    print("Connect to port: %s" % os.ttyname(slave))


    fl = fcntl.fcntl(host_port, fcntl.F_GETFL)
    fcntl.fcntl(host_port, fcntl.F_SETFL, fl | os.O_NONBLOCK)

    dv_port = os.open("/dev/ttyUSB0", os.O_RDWR | os.O_NONBLOCK)

    host_thread = threading.Thread(target=host_thread, args=[host_port, dv_port])
    host_thread.start()

    dv_thread = threading.Thread(target=dv_thread, args=[host_port, dv_port])
    dv_thread.start()

    while True:
        time.sleep(.1)

0 个答案:

没有答案