8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Watchdogを使ってみた

Posted at

Pythonでファイルの変更を監視するためのクラスとして、Watchdogというクラスがあります。

Qiitaにもほかにも記事がありますので、使うのに困ることはあまりないと思います。

ただいちおう使用するにあたって躓いたところがあるのでいちおうそこだけメモ。

Watchdogで監視できるのは、フォルダのみ

Watchdogは他の方が書かれているサンプルにもあるとおり、watchdog.observers.Observerオブジェクトを使ってファイルを監視します。

    self.observer = Observer()
    self.observer.schedule(ChangeHandler(), dir)
    self.observer.start()

ただ、Observer#schedule()に指定できるのは「フォルダのパスのみ」です。ファイルパスを指定することはできません。

特定のファイルだけ監視したいときは、親フォルダを監視した上で、ファイル名で照合をしましょう。

class ChangeHandler(FileSystemEventHandler):
  """
  Event handlers for watchdog.
  """

  def __init__(self, owner):
    self.owner = owner

  def on_modified(self, event):
    p = Path(event.src_path)
    if p == self.owner._review_file or p.suffix in [".js", ".css"]:
      self.owner.show_review()

フォルダのパスは「文字列で」指定する

引数には文字列しか指定することはできません。なんだかんだこのようにパスを指定する場面で指定できることの多いpathlib.Path型を指定することはできません。かならずstr()関数などで文字列化してから指定する必要があります。

監視をやめたいときは

監視をやめるときは、Observer#stop()Observer#join()を呼びます。

      self.observer.stop()
      self.observer.join()
8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?