0

新しいコーダーはこちら

このコードを少しクリーンアップできることを望んでいます。smtplib をクラスから移動できるようにしたいのですが、pinotify データを含む電子メールを送信する必要があります。私のコードを見るとわかります。非常に冗長です。

データを通知する場合 > ファイルが作成されたデータを含む電子メールを送信する

データを通知する場合 > ファイルが削除されたデータを含む電子メールを送信する

どうすればこれを統合できますか。

import os, pyinotify, time, smtplib, string
from pyinotify import WatchManager, Notifier, ThreadedNotifier, EventsCodes, ProcessEvent


wm = WatchManager()
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE  # Watched Events

class PTmp(ProcessEvent):
  def process_IN_CREATE(self,event):
    output = "Created: %s " % os.path.join(event.path, event.name) 
    localtime = time.asctime( time.localtime(time.time()) )
    final = output + localtime
    SUBJECT = "Directory Changed"
    TO = "user@localhost"
    FROM = "user@domain.net"
    text = final
    BODY = string.join((
            "From: %s" % FROM,
            "To: %s" % TO,
            "Subject: %s" % SUBJECT ,
            "",
            text
            ), "\r\n")  
    s=smtplib.SMTP('localhost')
    s.sendmail(FROM, TO, BODY)
    s.quit()
  def process_IN_DELETE(self,event):
    output = "Removed: %s" % os.path.join(event.path, event.name)
    localtime = time.asctime( time.localtime(time.time()) )
    final = output + localtime
    SUBJECT = "Directory Changed"
    TO = "user@localhost"
    FROM = "user@domain.net"
    text = final
    BODY = string.join((
            "From: %s" % FROM,
            "To: %s" % TO,
            "Subject: %s" % SUBJECT ,
            "",
            text
            ), "\r\n")
    s=smtplib.SMTP('localhost')
    s.sendmail(FROM, TO, BODY)
    s.quit()

notifier=Notifier(wm, PTmp())
wdd=wm.add_watch('/var/test',mask,rec=True)

while True:  # Loop Forever
  try:
     # process the queue of events as explained above
     notifier.process_events()
     if notifier.check_events():
        # read notified events and enqeue them
        notifier.read_events() 

  except KeyboardInterupt:
     # Destroy the inotify's instance on this interupt(stop monitoring)
     notiifier.stop()
     break
4

1 に答える 1

0

コードを改善したい場合、最初にできることは、すべての定数を myapp.conf のような別のファイルに配置することです。

 SUBJECT = {'dc':'Directory changed', 'sf':'Server fault' and etc}
 TO = 'user@localhost'
 FROM = 'user@localhost'
 and etc ...

メール本文の作成には、Mako などのテンプレート エンジンを使用できます。それを使用すると、メール テンプレートを別の別のファイルに配置できます。また、クラスの実装をメイン コードから分離することもできます。その後、コードはより柔軟に維持され、保守が容易になります。

于 2012-06-09T07:51:43.183 に答える