有没有办法从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似乎缓冲了数据,因此不会跳过任何内容。我想跳过除当前行之外的所有内容。
答案 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)