如何从python中的stdin读取最近的行

时间:2014-11-27 16:05:38

标签: python stdin

有没有办法从stdin只读取当前数据?

我想将一些永无止境的输入数据(从像设备一样的鼠标)传输到python脚本中,只获取最新的数据行。

输入x,y数据看起来像这样,每秒达到600行:

0.123,0.123
0.244,0.566
etc.

到目前为止,我尝试过这样的事情:

import sys, time

while 1:
    data = sys.stdin.readline()
    my_slow_function(data)

Python似乎缓冲了数据,因此不会跳过任何内容。我想跳过除当前行之外的所有内容。

2 个答案:

答案 0 :(得分:2)

只需启动一个单独的线程即可将stdin读入全局变量。使它成为一个守护程序线程,以便您以后不必关闭它。线程在数据到达时读取数据并不断丢弃旧数据。让你的常规程序在想要的时候阅读last_line。

我添加了一个事件,以便常规程序可以在没有新数据时等待。如果这不是您想要的,请将其取出。

import sys
import threading

last_line = ''
new_line_event = threading.Event()


def keep_last_line():
    global last_line, new_line_event
    for line in sys.stdin:
        last_line = line
        new_line_event.set()

keep_last_line_thread = threading.Thread(target=keep_last_line)
keep_last_line_thread.daemon = True
keep_last_line_thread.start()

答案 1 :(得分:0)

保留当前行,仅对最后一行采取行动。

buffer = None
for line in sys.stdin:
    buffer = line
my_slow_function(buffer)