2017-07-28 12 views
-1

COMポートからの出力フローがあり、10秒ごとの新しいファイルごとにファイルに保存します。Python 3で10秒ごとに出力を新しいファイルに保存します。

私はこのようなCOMポート読み取ることができます。

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がすべきこの場合:私はおそらく、私はこのような何かを必要とし、10秒ごとに変更のファイル名が必要なので、

import sys 
import datetime, threading 


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

をグローバルになってください。 私はいくつかのフラグを立てて、それを書く前にチェックする必要がありますか?

ありがとうございました。

+0

'fh'をグローバルにする必要がある場合、' global fh'はそれをグローバルにします。あなたは 'グローバル'を使うことができない理由は何ですか? – direprobs

+2

ログから[TimedRotatingFileHandler](https://docs.python.org/3/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler)を使用して –

+0

ありがとうございました!正常に動作します – 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) 
関連する問題