Python脚本导致时间漂移

时间:2016-03-03 09:58:27

标签: python datetime raspberry-pi

我有以下Python脚本:

#!/usr/bin/env python
# coding: utf-8

import time
import serial
import datetime
from datetime import timedelta
import os.path

PATH = '/home/pi/test/'
Y = datetime.datetime.now().strftime('%Y')[3]

def get_current_time():
    return datetime.datetime.now()


def get_current_time_f1():
    return datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')


def get_current_time_f2():
    return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')


def compare_time():
    current_time = get_current_time()
    if current_time.minute == 59 and current_time.second >= 45:
        return "new"


def file_date():
    if compare_time() == "new":
    plusonehour = datetime.datetime.now() + timedelta(hours=1)
    return plusonehour.strftime('Z'+Y+'%m%d%H')
else:
    return datetime.datetime.now().strftime('Z'+Y+'%m%d%H')


def createCeilFile():
    filename = os.path.join(PATH, file_date()+".dat")
    fid = open(filename, "w")
    fid.writelines(["-Ceilometer Logfile","\n","-File created: "+get_current_time_f1(),"\n"])
    return fid


# open the first file at program start
fid = createCeilFile()

# serial port settings
ser=serial.Serial(
   port='/dev/ttyUSB0',
   baudrate = 19200,
   parity=serial.PARITY_NONE,
   stopbits=serial.STOPBITS_ONE,
   bytesize=serial.EIGHTBITS,
)
counter=0

# read first byte, grab date string, read rest of string, print both in file
while 1: 
  tdata = ser.read()
  time.sleep(3)
  data_left = ser.inWaiting()
  tdata += ser.read(data_left)
  fid.writelines(["-"+get_current_time_f2(),"\n",tdata,"\n"])

  #should have ~10 secs before next message needs to come in
  #if next string will go into the next hour
  if compare_time() == "new":
      # close old file
      fid.writelines(["File closed: "+get_current_time_f2(),"\n"])
      fid.close()

      # open new file
      fid = createCeilFile()

      # then it goes back to 'tdata = ser.read()' and waits again.

它工作正常并以正确的格式存储我需要的所有数据等等。

来自设备的数据消息每15秒钟就会出现一次。 python脚本运行无限时间并读取这些消息。在每条消息的开头,脚本会添加一个时间,当消息写入文件并因此收到时。时间是这个脚本的问题。我在24小时内有3到4秒的时间漂移​​。奇怪的是,时间向后漂移。因此,如果我开始在分钟的11,26,41和56秒进入数据消息,24小时后消息似乎分钟在8,23,38和53秒进入。

有没有人对此作出解释或者可能是一种补偿方式?我想在保存每小时文件后每小时重新启动一次程序。也许这有助于重置奇怪的时间漂移​​?

0 个答案:

没有答案