在Python中X秒后超时

时间:2015-04-23 15:13:25

标签: python serial-port timeout

我在python中编写一个程序,其工作原理如下:

  1. 输入字符串输入字符串,按enter键(Carriage 返回)
  2. 检查输入字符串的第一个字符是否存在Carriage Return CR符号,然后继续
  3.   

    问题

    如果我没有获得Null并且在同一时间或特定时间间隔之后获得另一个字符串,则可能会遇到麻烦。 为了避免这个问题,我想添加超时会话,如果没有收到回车,则在特定的时间间隔后使前一个缓冲区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 = ""

    请仔细阅读下面的代码并指导我如何在其中添加超时选项?

      

    CODE

    <div>
      <img id="main" width="100%" id="item-detail-img-main-img">
    </div>
    <ul id="thumbs">
      <li><img src="https://icons.iconarchive.com/icons/fi3ur/fruitsalad/256/banana-icon.png"></li>
      <li><img src="https://icons.iconarchive.com/icons/bingxueling/fruit-vegetables/256/apple-red-icon.png"></li>
    </ul>
    <script type="text/javascript">
        var main = $('img#main');
        $('#thumbs img').click(function(e) {
            var imageSrc = e.currentTarget.src;
            // You need to determine your own srcset paths here
            var srcSet = imageSrc + ' 400w, ' + imageSrc + ' 600w';
            main.attr('src', imageSrc);
            main.attr('srcset', srcSet);
        });
    </script>
    

2 个答案:

答案 0 :(得分:1)

我可能会错误地阅读您的问题,但似乎您只想在一段时间后清除缓冲区字符串?这将每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 = ""

答案 1 :(得分:1)

我认为你只需要在程序结束时添加这一行。 每次输入正确的字符串

时,此行将添加更多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