【发布时间】:2015-01-07 15:53:28
【问题描述】:
这次我想知道以下情况存在哪些可能的解决方案:我让我的笔记本电脑使用我已经发布在这里的 python 脚本读取原始鼠标数据(Ubuntu OS)。它有一个方法,可以读取鼠标文件并从中提取 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 绘制数据,这很有效,但它是未来改进的东西;)
【问题讨论】:
-
你能不能用类似 greenlet 的东西来线程化数据收集,并用键绑定从数据记录线程调用 switch()?
-
目前我还没有很好地掌握线程,但我会研究一下。一个样本看起来会很好:)
-
Greenlet 的文档中有一些可能会有所帮助的示例:greenlet.readthedocs.org/en/latest/#introduction。此外,将您的问题集中在特定的事情上可能对您有好处 - 例如(停止数据收集)并拥有绘图和文件相关部分(分开)它可以更容易地查看您的问题。
-
这对于
select或epoll来说可能是一个很好的例子。 -
我不确定 select 或 epoll 在这里有什么帮助。它似乎有助于检查数据 i/o 是否正在发生。如果我没看错的话。
标签: python stream export-to-excel