首页 > 解决方案 > 仅在串口设备输出数据时写入

问题描述

我正在尝试制作一个数据记录器,而不是从每分钟仅输出一次的串行设备写入输出。我需要它在输出上有一个时间戳。到目前为止,我拥有的代码将记录输出,但它会在设备输出之间保留带有时间戳的空白记录。当设备有输出时,如何让它只写一行带有时间戳的行?

#!/usr/bin/env python

Log data from serial port

import argparse import serial import datetime import time import os timestr = time.strftime("%Y%m%d") Tstamp = time.strftime("%Y/%m/%d %H:%M ") 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') outputFile.write(Tstamp + " " + data + '\n') outputFile.flush() except KeyboardInterrupt: print("Logging stopped")

很抱歉格式不好,我不知道如何让它看起来正确。

标签: python-3.xdatalog

解决方案


通过正确添加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")

推荐阅读