gpt4 book ai didi

Python暂停或停止实时数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:08 25 4
gpt4 key购买 nike

这次我想知道以下情况存在哪些可能的解决方案:我让我的笔记本电脑使用我已经在此处发布的 python 脚本读取原始鼠标数据(Ubuntu 操作系统)。它有一个方法,可以读取鼠标文件并从中提取 x,y 数据。 while true 循环使用此方法将数据放入数组中。当我使用时间计数器一段时间后停止读取时,脚本将数据放入 Excel 文件中。我现在需要的是暂停数据流的选项,即更改鼠标位置而不创建数据,然后恢复它。我想要一些东西来停止阅读并将其写入 Excel 中。

import struct
import matplotlib.pyplot as plt
import numpy as np
import xlsxwriter
import time
from drawnow import *

workbook = xlsxwriter.Workbook('/path/test.xlsx')
worksheet = workbook.add_worksheet()
file = open( "/dev/input/mouse2", "rb" );
test = [(0,0,0)]
plt.ion()


def makeFig():
plt.plot(test)
#plt.show()

def getMouseEvent():
buf = file.read(3);
button = ord( buf[0] );
bLeft = button & 0x1;
x,y = struct.unpack( "bb", buf[1:] )
_zeit = time.time()-test[-1][-1]
print ("x: %d, y: %d, Zeit: %d\n" % (x, y, _zeit) )
return x,y, _zeit

zeit = time.time()

warte = 0
while warte < 20:
test.append(getMouseEvent())
warte = time.time()-zeit

row = 1
col = 0
worksheet.write(0,0, 'x-richtung')
worksheet.write('C1', 'Zeit')
for x, y , t in (test):
worksheet.write(row, col, x)
worksheet.write(row, col + 1, y)
worksheet.write(row, col + 2, t)
row += 1
chart = workbook.add_chart({'type': 'line'})
chart.add_series({'values': '=Sheet1!$A$1:$A$'+str(len(test))})
worksheet.insert_chart('D2', chart)
workbook.close()
#drawnow(makeFig)
#plt.pause(.00001)
file.close();

如果有“按空格暂停/取消暂停。q结束并保存”之类的东西那就太棒了,但我不知道该怎么做。任何想法都会很好:)哦,我尝试用 matplotlib 绘制数据,它有效,但它是 future 改进的东西;)

最佳答案

这是一个标准线程模块的示例 - 我实际上不知道它的响应速度如何。另外,如果您想根据全局热键而不是脚本来暂停或开始输入,这将取决于您的桌面环境 - 我只使用了 xlib 但应该有一个 python 包装器漂浮在某处。

import threading
import struct

data =[]
file = open("/dev/input/mouse0", "rb")
e=threading.Event()

def getMouseEvent():
buf = file.read(3);
#python 2 & 3 compatibility
button = buf[0] if isinstance(buf[0], int) else ord(buf[0])
bLeft = button & 0x1;
bMiddle = ( button & 0x4 ) > 0;
bRight = ( button & 0x2 ) > 0;
x,y = struct.unpack( "bb", buf[1:] );
return "L:%d, M: %d, R: %d, x: %d, y: %d\n" % (bLeft,bMiddle,bRight, x, y)


def mouseCollect():
global e
#this will wait while e is False (without breaking the loop)
#and loop while e is True
while e.wait():
#do something with MouseEvent data, like append to an array, or redirect to pipe etc.
data.append(getMouseEvent())
mouseCollectThread = threading.Thread(target=mouseCollect)
mouseCollectThread.start()
#toggle mouseCollect with any keyboard input
#type "q" or "quit" to quit.
while True:
x = input()
if x.lower() in ['quit', 'q', 'exit']:
mouseCollectThread._stop()
file.close()
break
elif x:
e.clear() if e.isSet() else e.set()

编辑:我在 e.isSet 之后缺少 ()

关于Python暂停或停止实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com