Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当与while 1一起使用时,如何在pyserial python中终止ser.read而不输入任何命令?_Python_Python 2.7_Serial Port_Pyserial_Uart - Fatal编程技术网

当与while 1一起使用时,如何在pyserial python中终止ser.read而不输入任何命令?

当与while 1一起使用时,如何在pyserial python中终止ser.read而不输入任何命令?,python,python-2.7,serial-port,pyserial,uart,Python,Python 2.7,Serial Port,Pyserial,Uart,我正在尝试编写一个脚本,目前我正在直接使用ser.read()并打印值,但我想编写一个函数,在该函数中等待一段时间读取所有字符,然后退出循环。当前循环打印所有字符,但不会退出循环,我必须编辑并通过键盘单击使其退出。但我想要一个脚本,它读取并退出,用户不需要做任何事情。很抱歉,如果有一个noob问题,但是Python和Pyserial的新问题 if(ser.isOpen()): try: def read(): ser.flushInput() while 1:

我正在尝试编写一个脚本,目前我正在直接使用ser.read()并打印值,但我想编写一个函数,在该函数中等待一段时间读取所有字符,然后退出循环。当前循环打印所有字符,但不会退出循环,我必须编辑并通过键盘单击使其退出。但我想要一个脚本,它读取并退出,用户不需要做任何事情。很抱歉,如果有一个noob问题,但是Python和Pyserial的新问题

if(ser.isOpen()):
    try:
def read():
    ser.flushInput()    
    while 1:
    try:
        check = ser.read()
        print check
    except Exception:
        print("Error")
else:
    print("Port not open")

如果您想在退出之前等待一定的时间,请尝试以下方法。在本例中,代码将等待5秒钟

import time

def read():
    ser.flushInput()
    start_time = time.time()
    while time.time() - start_time < 5:
        try:
            check = ser.read()
            print check
        except Exception:
            print("Error")
导入时间
def read():
flushInput爵士()
开始时间=time.time()
while time.time()-开始时间<5:
尝试:
check=ser.read()
打印支票
除例外情况外:
打印(“错误”)

pyserial在
\uuuu init\uuuu
中有一个
read timeout
和一个
read(size=n)
请参见:谢谢,我尝试过使用它,但它在Python2.7中不起作用,在Python3.x中也不起作用。它给出了一些其他错误,需要检查它是否有效(True):if(ser.inWaiting()>0):#如果传入字节正在等待从串行输入缓冲区数据读取_str=ser.read(ser.inWaiting()).decode('ascii')#读取字节并将其从二进制数组转换为ascii打印(data_str,end='')ThanksHi jgrant我正在使用上述函数,但它仍然停留在循环中,我无法摆脱它?除此之外,我还需要做哪些变通或更改?谢谢我猜它挂在ser.read()行上。它可能在等待一个字节被传输。尝试在创建ser时为其添加超时。如下所示:ser=serial.serial('COMX',timeout=1)感谢jgrant感谢您的帮助,使用timeout尝试它,如果没有,希望它能工作。我正在考虑使用此部分作为其工作def read():if(ser.inWaiting()>0):str=ser.read(ser.inWaiting())print(str)