python和串口线程

时间:2017-10-05 01:03:13

标签: python multithreading

我已经就这个主题做了几个问题,但是我仍然遇到问题。我希望能够启动一个监控串口的程序,但仍然允许我向串口发送命令。 我发现这个问题/主题非常有用PySerial non-blocking read loop 回答我的问题,但它仍然无法正常工作。 我试图使用线程编写一个非阻塞串口读取,但仍能发送命令,如" fs ls" (文件系统列表文件)。以下是我的尝试。当我运行这个时,我会被困在真实案例中。我期待线程启动它然后继续前进。 然后当5" fs ls"命令运行我在std_out中看到命令行响应。相反,我一无所获。 NB!这是一个在我正在交谈的设备上运行的命令,它简单地返回当前目录的内容,就像Linux ls命令一样。 欢迎所有想法。欢呼声

import sys
import serial
import time
import threading

class dutserial(object):
    def __init__(self, port):
        self._port = port
        self._baudrate=921600
        self._conn = None    

    def dutOpenConn(self):
        try:
            self._conn = serial.Serial(self._port, self._baudrate)
            return self._conn
        except:
            print "Failed to open port %s " % str(self._port)

    def dutCloseConn(self):
        self._conn.close()

    def dutSendCmd(self, cmd):
        self._conn.write(cmd + '\r\n')

    def dutRead(self):
        #self._conn.write('fs ls \r\n')
        time.sleep(1)
        out = ''
        while True:           
            while self._conn.inWaiting() > 0:
                out += self._conn.read(1)

            if out != '':
                print ">>" + out        

def main():
    s = dutserial('com4')
    s.dutOpenConn()
    ReadThread = threading.Thread(target= s.dutRead())
    ReadThread.start()

    # The program is hanging up here. it never moves on to the next loop 
    # where I'm planning on testing out my no-blocking serial port read

    for _ in range(5):
        s.dutSendCmd('fs ls')
        time.sleep(2)

    print 'Done.......'    


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

嗨我认为导致代码卡住的原因是因为在线程函数中你不应该把你想要的方法后面的()作为你的线程目标。如果你把()(s.dutRead())它只会让你的代码执行方法s.dutRead(),所以请尝试删除目标线程上的()