仅在串口设备输出数据时写入
Only write when serial device outputs data
我正在尝试制作一个数据记录器,而不是从每分钟只输出一次的串行设备写入输出。我需要它在输出上有一个时间戳。到目前为止,我的代码将记录输出,但它会在设备输出之间使用时间戳记录空白。如何让它在设备有输出时只写一行时间戳?
#!/usr/bin/env python
<h1>从串口记录数据</h1>
导入 argparse
导入序列号
导入日期时间
导入时间
导入 os
timestr = time.strftime("%Y%m%d")
Tstamp = time.strftime("%Y/%m/%d %H:%M")
解析器 = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
参数 = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")
以 serial.Serial(args.device, args.speed) 作为 ser,open(outputFilePath,'w') 作为输出文件:
打印("Logging started. Ctrl-C to stop.")
尝试:
而真实的:
time.sleep(1)
x = (ser.read(ser.inWaiting()))
数据 = x.decode('UTF-8')
outputFile.write(Tstamp + " " + data + '\n')
outputFile.flush()
除了键盘中断:
打印("Logging stopped")
抱歉格式不佳,我不确定如何让它在此处看起来正确。
通过添加 if x!= ""
并正确缩进,我让它工作了。现在我只需要修复它以附加文件而不是覆盖它。
#!/usr/bin/env python
# Log data from serial port
import argparse
import serial
import datetime
import time
import os
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")
with serial.Serial(args.device, args.speed) as ser, open(outputFilePath,'w') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(1)
x = (ser.read(ser.inWaiting()))
data = x.decode('UTF-8')
if data !="":
outputFile.write(time.strftime("%Y/%m/%d %H:%M ") + " " + data )
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")
我正在尝试制作一个数据记录器,而不是从每分钟只输出一次的串行设备写入输出。我需要它在输出上有一个时间戳。到目前为止,我的代码将记录输出,但它会在设备输出之间使用时间戳记录空白。如何让它在设备有输出时只写一行时间戳?
#!/usr/bin/env python
<h1>从串口记录数据</h1>
导入 argparse
导入序列号
导入日期时间
导入时间
导入 os
timestr = time.strftime("%Y%m%d")
Tstamp = time.strftime("%Y/%m/%d %H:%M")
解析器 = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
参数 = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")
以 serial.Serial(args.device, args.speed) 作为 ser,open(outputFilePath,'w') 作为输出文件:
打印("Logging started. Ctrl-C to stop.")
尝试:
而真实的:
time.sleep(1)
x = (ser.read(ser.inWaiting()))
数据 = x.decode('UTF-8')
outputFile.write(Tstamp + " " + data + '\n')
outputFile.flush()
除了键盘中断:
打印("Logging stopped")
抱歉格式不佳,我不确定如何让它在此处看起来正确。
通过添加 if x!= ""
并正确缩进,我让它工作了。现在我只需要修复它以附加文件而不是覆盖它。
#!/usr/bin/env python
# Log data from serial port
import argparse
import serial
import datetime
import time
import os
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")
with serial.Serial(args.device, args.speed) as ser, open(outputFilePath,'w') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(1)
x = (ser.read(ser.inWaiting()))
data = x.decode('UTF-8')
if data !="":
outputFile.write(time.strftime("%Y/%m/%d %H:%M ") + " " + data )
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")