Python X 秒后超时
Timeout after X second in Python
我正在 python 中编写一个程序,其工作方式如下:
- 通过串口获取输入字符串,回车时(回车
Return)
- 检查
$
符号是否作为输入字符串的第一个字符出现,然后继续
Problem
如果我没有得到 Carriage Return CR
并同时或在特定时间间隔后得到另一个字符串,这可能会造成麻烦。
为了避免这个问题,我想添加超时会话,如果未收到运输 Return,则在特定时间间隔后使前一个缓冲区 Null
。
请查看下面的代码并指导我如何在其中添加超时选项?
CODE
import serial
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
while True:
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
我可能没看懂你的问题,但你似乎只想在设定的时间后清除缓冲区字符串?这将每 60 秒清除一次:
import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
if time.time() >= clear_buffer:
buffer = ''
clear_buffer = time.time() + 60
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
我以为你只需要在程序末尾添加这一行。
每次输入正确的字符串时,该行都会增加 60 秒
clear_buffer = time.time() + 60
查看下面的编码
import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
if time.time() >= clear_buffer:
buffer = ''
clear_buffer = time.time() + 60
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
clear_buffer = time.time() + 60
我正在 python 中编写一个程序,其工作方式如下:
- 通过串口获取输入字符串,回车时(回车 Return)
- 检查
$
符号是否作为输入字符串的第一个字符出现,然后继续
Problem
如果我没有得到 Carriage Return CR
并同时或在特定时间间隔后得到另一个字符串,这可能会造成麻烦。
为了避免这个问题,我想添加超时会话,如果未收到运输 Return,则在特定时间间隔后使前一个缓冲区 Null
。
请查看下面的代码并指导我如何在其中添加超时选项?
CODE
import serial
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
while True:
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
我可能没看懂你的问题,但你似乎只想在设定的时间后清除缓冲区字符串?这将每 60 秒清除一次:
import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
if time.time() >= clear_buffer:
buffer = ''
clear_buffer = time.time() + 60
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
我以为你只需要在程序末尾添加这一行。 每次输入正确的字符串时,该行都会增加 60 秒
clear_buffer = time.time() + 60
查看下面的编码
import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
if time.time() >= clear_buffer:
buffer = ''
clear_buffer = time.time() + 60
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
if buffer[0] == '$':
x1 = buffer.rstrip()
x2= x1.split(",")
print((x2[0]),(x2[1]),(x2[2]))
buffer = ""
clear_buffer = time.time() + 60