2017-03-07 14 views
1

私はプログラムを実行するたびに別のファイルにデータを書き込むプログラムを書いた。これは初めてのことですが、プログラムをやり直すと、2つのエントリが作成され、3つ目は4つのエントリが作成されます。私は間違いを見つけられません。ログファイルがあまりにも多くのエントリを作成するが、なぜわからない

これは新しいファイルにエントリを作成しなければならないコードの一部です:

import datetime    
import logging 

logging.basicConfig(filename='loghistory.log', filemode='w', level=logging.DEBUG) 
logger = logging.getLogger('loghistory.log') 
ch = logging.FileHandler('loghistory.log',mode='w') 
# to empty exisiting file: logging.FileHandler('loghistory.log', mode ='w') 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p') 
ch.setFormatter(formatter) 
logger.addHandler(ch) 
logger.setLevel(logging.DEBUG) 

if q2==0 and q1==0: 
    logger.debug('No airplanes within 5 km') 
else: 
    if q2 ==0 and q1>0: 
     logger.debug('At least 1 airplane within 5 km') 
    else: 
     if q2>0: 
      logger.debug('At least 1 airplane within 2 km') 

これは、それが現在のようになります。

03/07/2017 09:06:21 AM - loghistory.log - DEBUG - At least 1 airplane within 2 km 
03/07/2017 09:06:21 AM - DEBUG:loghistory.log:At least 1 airplane within 2 km 
03/07/2017 09:06:21 AM - loghistory.log - DEBUG - At least 1 airplane within 2 km 

が、それは次のようになります。

03/07/2017 09:06:21 AM - At least 1 airplane within 2 km 
03/07/2017 09:06:22 AM - At least 1 airplane within 2 km 
03/07/2017 09:06:23 AM - At least 1 airplane within 2 km 

毎秒1つの新しいエントリ(または2秒)。

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
import pandas as pd 
import math 
import numpy as np 
import winsound 
from Tkinter import * 


#---------------------------------------------------------------------------------- 
# import and reduce data and change it to distances 

data = np.genfromtxt("c:/kenny/daten/daten1s55.py",dtype = np.str,delimiter=",") 
x=data 
y11=[] 
z=[] 
w1=[] 
w2=[] 
w3=[] 
i=0 
for i in range(len(x)): 
    if (len(x[i][14]) > 0): 
     y11.append((math.acos(math.sin(math.radians(float(x[i][14])))*math.sin(math.radians(54.102427))+math.cos(math.radians(54.102427))*math.cos(math.radians(float(x[i][14])))*math.cos(math.radians(11.735042-float(x[i][15])))))*6378.388) 
     z.append(x[i][4]) 
     w1.append(x[i][14]) 
     w2.append(x[i][15]) 
     w3.append(x[i][11]) 

v=np.column_stack((z,y11,w1,w2,w3)) 
M = pd.DataFrame(v) 
"""M.columns=['Flightcode','Distance','Lat','Long','Height']""" 
M[1] = M[1].astype(float) 
M1=M.sort([0,1]) 
M2=M1.reset_index(drop=True) 

v1=[] 
v2=[] 
v3=[] 
v4=[] 
v5=[] 
ii=0 
v1.append(M2[0][0]) 
v2.append(M2[1][0]) 
v3.append(M2[2][0]) 
v4.append(M2[3][0]) 
v5.append(M2[4][0]) 
for ii in range(len(z)): 
    if M2[0][ii] <> v1[-1]: 
     v1.append(M2[0][ii]) 
     v2.append(M2[1][ii]) 
     v3.append(M2[2][ii]) 
     v4.append(M2[3][ii]) 
     v5.append(M2[4][ii]) 

Data_gekuertzt1=np.column_stack((v1,v2,v3,v4,v5)) 
Data_gekuertzt= pd.DataFrame(Data_gekuertzt1) 

#---------------------------------------------------------------------------------- 
# alert when airplane closer than 2 or 5 km 

q1=0 
q2=3 

for k in range(len(Data_gekuertzt)): 
    if v2[k] <=5 and v2[k]>2: 
      q1+=1 
    else: 
     if v2[k]<=2: 
       q2+=1 
if q2 > 0: 
    winsound.Beep(600,2000) 
    root = Tk() 
    root.geometry('{}x{}'.format(520, 300)) 
    w = Label(root, text= 'Airplane within 2 km radius',fg = "red",font = "Helvetica 30 bold italic") 
    w.pack() 
    root.mainloop() 

if q1 >0: 
    winsound.Beep(300,2000) 



#--------------------------------------------------------------------------------------- 
#create a logfile 


import datetime    
import logging 


logger = logging.getLogger('loghistory.log') 
ch = logging.FileHandler('loghistory.log') 
# to empty exisiting file: logging.FileHandler('loghistory.log', mode ='w') 
formatter = logging.Formatter('%(asctime)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p') 
ch.setFormatter(formatter) 
logger.addHandler(ch) 
logger.setLevel(logging.DEBUG) 

if q2==0 and q1==0: 
    logger.debug('No airplanes within 5 km') 
else: 
    if q2 ==0 and q1>0: 
     logger.debug('At least 1 airplane within 5 km') 
    else: 
     if q2>0: 
      logger.debug('At least 1 airplane within 2 km') 
+0

これはFileHandlerの動作方法です。ログメッセージをファイルに追加します。あなたはそれが何をすると思いますか?またはむしろ何を達成したいですか? – nir0s

+0

@ nir0s私は私の質問を編集しました。私が達成したいのは、プログラムが1秒または2秒ごとにメッセージを記録するということですが、プログラムを何度か実行すると1回だけではなく同じメッセージが複数回追加されます。 – Kenny

答えて

-1
import datetime 
import os 
def write_log(filename, log_data): 
    curr_time = datetime.datetime.now().strftime('%d-%m-%Y %H:%M:%S') 
    try: 
     if not os.path.exists("my_logs"): 
      os.makedirs("my_logs") 
     with open("my_logs/"+filename, "a") as text_file: 
      text_file.write(curr_time + "\t" + log_data + "\n") 
    except: 
     return 

私はこの機能を使ってログを書きます。これはログを書き込むための最も簡単なアプローチです(私のように)。

logging.basicConfig(filename='loghistory.log', filemode='w', level=logging.DEBUG) 

そして、それは、ファイルへの単一のメッセージを書き込みます:

+0

簡単な書式設定や複数のハンドラのエンコーディングと単一設定のような組み込みロギングモジュールを使用する理由があります。 – nir0s

0

あなたは:)妙

削除をごロガーを設定しています。あなたが述べたように、すべてのログメッセージを出力する前にファイルを上書きするので、プログラムが何度も何度も実行されるため、複数のエントリからなるファイルを取得することはありません。

+0

これを試してみて、少し助けてください。 ファイルは次のようになります。 03/07/2017 10:12:00 AM - loghistory.log - DEBUG - 2km以内に少なくとも1機飛行機 03/07/2017 10:12:18 AM - loghistory。ログ - DEBUG - 少なくとも1機の飛行機が2km以内 03/07/2017 10:12:18 AM - loghistory.log - DEBUG - 少なくとも1機の飛行機が2km以内 03/07/2017 10:12:18 AM - loghistory.log - DEBUG - 少なくとも1機の飛行機が2km以内にあります。 03/07/2017 10:12:18 AM - loghistory。ログ - DEBUG - 2km以内に少なくとも1機飛行機 最後のエントリーはまだ複製されています – Kenny

+0

実際には私はそれが問題を解決していないことに気づきました – Kenny

+0

それから私は何かを誤解しているかもしれません。ログファイルに複数のログメッセージがあることが予想される場合、これは実行されません。 'w'フラグを渡しているので、毎回1つのメッセージだけを出力します。私はコードを実行しており、毎回単一のメッセージでファイルを再作成します。 – nir0s

関連する問題