Help us understand the problem. What is going on with this article?

Watchdogを使ってみた

More than 1 year has passed since last update.

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()
TakamiChie
NPO法人 まちづくりエージェント SIDE BEACH CITY.理事。フリーランスのプログラマ。横浜・横須賀でIT勉強会の主催などをやってます。
https://onpu-tamago.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした