4

私は Python の初心者です。シリアル ポートからデータを取得してログ ファイルに書き込む小さなロガーを作成しました。追加のためにファイルを開き、書き込み、そして閉じる小さな手順があります。これは最善の方法ではないかもしれないと思いますが、これまでのところ私が理解したことです。

UTC 00 で自動的にログのローテーションを実行できるようにしたいのですが、これまでのところ、RotatingFileHandler でこれを行う試みは失敗しました。

コードは次のようになります。

import time, serial, logging, logging.handlers,os,sys
from datetime import *

CT12 = serial.Serial()
CT12.port = "/dev/ct12k"
CT12.baudrate = 2400
CT12.parity = 'E'
CT12.bytesize = 7
CT12.stopbits = 1
CT12.timeout = 3

logStart = datetime.now()
dtg = datetime.strftime(logStart, '%Y-%m-%d %H:%M:%S ')
ctlA = unichr(1)
bom = unichr(2)
eom = unichr(3)
bel = unichr(7)
CT12Name = [ctlA, 'CT12-NWC-test']
CT12Header = ['-Ceilometer Logfile \r\n', '-File created: ', dtg, '\r\n']

def write_ceilo ( text ) :
    f = open ('/data/CT12.log', 'a')
    f.write (text)
    f.close ()

write_ceilo(''.join(CT12Header))

CT12.open()

discard = CT12.readlines()
#print (discard)

while CT12.isOpen():
    response = CT12.readline()
    if len(response) >= 3:
        if response[0] == '\x02' :
            now=datetime.now()
            dtg=datetime.strftime(now, '-%Y-%m-%d %H:%M:%S\r\n')
            write_ceilo(dtg)
            write_ceilo(''.join(CT12Name))
            write_ceilo(response)

これを自動的に回転させ、回転の日付またはシリアル番号を付けて識別できるようにするにはどうすればよいでしょうか。これらのいずれかをローテーションするつもりはありません。データの毎日のログ ファイルを保持するだけです。(または、1 時間ごとのファイルでしょうか?)

4

3 に答える 3

0

これを簡単に行うことができます:

import os
import time
date1 = time.strftime('%Y%m%d%H%M%S')
cmd1= "cp logfile logfile{0}".format(date1)
cmd2= "cat /dev/null > logfile"
os.system(cmd1)
os.system(cmd2)

「logfile」はファイルの名前です。古いログを日時に基づいた名前の新しいログ ファイルにコピーし、元のファイルを空にしました。1 時間ごとにローテーションする場合は、このスクリプトを cron に入れます。

于 2013-09-29T08:47:44.623 に答える