2016-04-17 3 views
1

私はpython-watchdogを使用して、追加、削除、変更などの変更の特定のパスを監視しています。時間とメッセージの情報とともに、その変更を行ったユーザーのユーザー名を取得します。私はgetpassを見ていて、ロギングの中で変数を探し回っていましたが、何も見つけられませんでした。PythonのロギングライブラリでOSユーザーのユーザー名を取得する方法は?

手がかりはありますか?マイウォッチドッグ・コードは、私は以下のようなものを私の問題を解決することができました

print 'starting the watcher mate...' 
create_log_file() 
logging.basicConfig(filename = log_file, level = logging.INFO, format = '%(asctime)s - %(message)s', datefmt = '%Y-%m-%d %H:%M:%S') 
path = sys.argv[1] if len(sys.argv) > 1 else '/etc/nginx/' 
event_handler = LoggingEventHandler() 
observer = Observer() 
observer.schedule(event_handler, path, recursive=True) 
observer.start() 
+5

これは役立つかもしれない:http://stackoverflow.com/questions/842059/is-there-a-portable-way-to-get-the-current-username-in-python –

答えて

2

の下

更新です。 メソッドオーバーライドを使用して問題を解決しました。 MyLoggingEventHandlerというPythonスクリプトに別のクラスを作成し、getpass.getuser()関数を使用してユーザーの名前を含めました。今、私は自分のログステートメントでユーザーの詳細を取得することができます。

コード

class MyLoggingEventHandler(LoggingEventHandler): 

    def on_moved(self, event): 
      super(LoggingEventHandler, self).on_moved(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Moved %s: from %s to %s, by %s", what, event.src_path, event.dest_path, getpass.getuser()) 

    def on_created(self, event): 
      super(LoggingEventHandler, self).on_created(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Created %s: %s, by %s", what, event.src_path, getpass.getuser()) 

    def on_deleted(self, event): 
      super(LoggingEventHandler, self).on_deleted(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Deleted %s: %s, by %s", what, event.src_path, getpass.getuser()) 

    def on_modified(self, event): 
      super(LoggingEventHandler, self).on_modified(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Modified %s: %s, by %s", what, event.src_path, getpass.getuser()) 

これらは私のログファイルから2行です。

2016-04-17 15:23:16 - Modified file: /path/to/file.txt, by myusername - 
2016-04-17 15:23:19 - Modified file: /path/to/file2.txt, by myusername - 
+2

ユーザ名に」ランタイム中に変更されるので、クラスをより効率的にすることができます。 '__init__'メソッドで' getpass.getuser() 'を呼び出し、それを他のメソッドがアクセスするためのインスタンス属性として保存します。 –

+0

@ PM2Ring - 同意します。しましょう。ありがとう! –

+1

これは、コンソールを実行しているローカルユーザー名だけを返します。ウォッチドッグがファイル共有を監視していますが、どのようにクライアントのユーザ名/ホスト名を返すことができますか? – ChristianG

関連する問題