2017-07-28 27 views
-1

我從COM端口的輸出流量,我想將它保存到文件中,在每10次新的文件。保存輸出到新的文件每隔10秒在Python 3

我可以讀取COM端口是這樣的:

import sys 
import datetime, threading 


for line in sys.stdin: 
    print(line) 
    my_writing_function(line) 

我需要改變每10秒文件名,這樣,可能我需要的是這樣的:

def filename(): 
    # if already opened -> close. 
    filename='{0:%Y-%m-%d_%H:%M:%S}'.format(datetime.datetime.now()) 
    fh = open(filename, "a+") 
    threading.Timer(10, filename).start() 

但在這種情況下,FH應被全球.. 可能是我需要做一些標記,寫前檢查呢?

謝謝。

+0

如果'fh'應該是全局的,那麼'global fh'將使它成爲全局的。那是什麼你不能夠使用'global'的原因是什麼? – direprobs

+2

你可以從伐木 –

+0

使用[TimedRotatingFileHandler(https://docs.python.org/3/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler)謝謝!工作正常 – John

回答

0
import sys 
import logging 
import time 
import datetime 
from logging.handlers import TimedRotatingFileHandler 

#---------------------------------------------------------------------- 
def create_timed_rotating_log(path): 
    logger = logging.getLogger("Rotating Log") 
    logger.setLevel(logging.INFO) 

    handler = TimedRotatingFileHandler(path, when="s", interval=2, backupCount=0) 
    logger.addHandler(handler) 
    while True: 
     try: 
      print('WHILE LOOP START') 
      for line in sys.stdin: 
       logger.info(line) 
       # raise Exception 
     except Exception as e: 
      print(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + '\n' +str(e)) 

#---------------------------------------------------------------------- 
if __name__ == "__main__": 
    log_file = "log" 
    create_timed_rotating_log(log_file)