我在Python 2.7中很新,我需要一些帮助。 我想编写一个脚本,使用串口从传感器读取数据,并将所有这些数据保存在文件中,加上时间戳。传感器定期发送数据。我希望应用程序完成它的循环或简单地接收数据,并在收到预定数量的数据或按键盘中的键时关闭文件和端口。 (目前任何关键都足够了。)
问题是,它以正确的方式在文件中保存数据,但是我无法通过按键来转义和关闭文件。我猜shell可能会被阻止..我不明白为什么它不起作用。任何帮助将不胜感激。我正在使用Windows 7。
这是我的代码:
import serial
import io
from time import gmtime, strftime
import msvcrt
medidas= 10
continuar=1
n_medidas=0
ser=serial.Serial(3,115200)
data_file=open ('data.txt','w')
fecha=strftime("(UTC) %a %d %b %Y %Hh:%Mm:%Ss",gmtime())
data_file.write('Datos enviados '+fecha+' por AP:\n')
data_file.write('Time_stamp' +'\t'+ 'EDx' +'\t'+ 'V(ADC)'+'\t'+'I(ADC)\n')
while continuar:
tiempo=strftime("%Hh:%Mm:%Ss",gmtime())
x=ser.readline()
data=tiempo+'\t' +x
print (data)
data_file.write(data)
n_medidas += 1
if msvcrt.kbhit():
continuar=0
if n_medidas == medidas :
break
data_file.close()
ser.close()
感谢。
答案 0 :(得分:0)
要正确执行此操作,您应该使用模块select
中的select
。它是一个操作系统工具,可以“等待”来自多个流的数据(在您的情况下是传感器和键盘)。
import select, sys
with open('/path/to/my/sensor') as sensorFile, \
open('/path/to/sensorDumpFile', 'w') as sensorDump:
while True:
r, w, e = select.select([ sys.stdin, sensorFile ], [], [])
if sys.stdin in r: # data coming from keyboard?
break # bail out
if sensorFile in r:
dataFromSensor = os.read(sensorFile.fileno(), 50) # reads what's there, at most 50 bytes
sensorDump.write(dataFromSensor)
如果你想对单键按下做出反应,你需要先将tty设置为无缓冲模式,但我认为这不是你现在的话题。 (如果您对此感兴趣,请这样说。)