私は現在、単一のディレクトリとその下位のすべてのサブディレクトリを監視し、出力をLoggingEventHandlerに渡す基本的な機能スクリプトを持っています。Pythonウォッチドッグを使用して複数のオブザーバを生成する
私は3つの別々の場所を監視するためにスクリプトを拡張したいと思っていますが、複数のオブザーバを生成して、それぞれの指定されたパスを監視する方法はわかりません。
私は、次の線に沿って何かをしようとしました:
import time
import thread
import threading
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
event_handler = LoggingEventHandler()
observer = Observer()
paths = ["C:\dir1", "C:\dir2", "C:\dir3"]
for i in paths:
targetPath = str(i)
observer.schedule(event_handler, targetPath, recursive=True)
observer.start_new_thread()
は、残念ながら、私は何の例では、そのドキュメント内が存在しないことをオブザーバを示すエラーが属性「start_new_thread」を持っていない
を受けディレクトリを監視する1人以上の観察者を示しています。私はスレッドを扱う経験がなく、私が正しい道にいるかどうかは分かりません。
代わりに、各パスのオブザーバークラスの新しいインスタンスを作成する必要がありますか?またはObserverクラスの複数のパスを1つのインスタンスに追加する方法がいくつかありますか?
わかりやすい回答がある場合はお詫び申し上げます。私は今これが完全に間違っていると確信しています、私はあまりにも疲れて理解できません。
追加:私は、スレッドの開始の問題を修正してきたが、私はまだ単一のインスタンスだけではなく、異なるパスを見て3つの別々のオブザーバーで立ち往生しています@FogleBirdへ
感謝。私の変更されたコードは次のようになります。
threads = []
for i in paths:
targetPath = str(i)
observer.schedule(event_handler, targetPath, recursive=True)
threads.append(observer)
observer.start()
print threads
これは3つのObservedWatchオブジェクトを返しますが、それらはすべて同じ内容を持っている:
[<Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>]
はまだそれ以上のヘルプは素晴らしいことだ、完全に間違って見えます。私はこのコンセプトを理解するのに苦労しています。
ADDITIONAL 2:
私はコードで約いじくる続けていると私は今の機能のように見える何かを持っている:私は出力に現れた最初の実行から収集することができるものから
event_handler = LoggingEventHandler()
N2watch = Observer()
threads = []
for i in paths:
targetPath = str(i)
N2watch.schedule(event_handler, targetPath, recursive=True)
threads.append(N2watch)
N2watch.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
N2watch.stop()
N2watch.join()
をピックアップは私のリストで指定された3つのパス名すべてに変更がありますが、検査するためのテストコードを書く必要があります。
これはどのように動作しているかわからないので、それ以上のコメントはすばらしいと思います。
乾杯。
3追加:
それは単に一つだけだったし、私の最初のコードの問題を強調しましたので、私は最高のようFogleBirdの答えをマーク。
私の以前の編集には、複数の場所を監視するための完全な作業コードが含まれており、現在正しく機能しているようです。
これに修正がありますか?私は同じことを実装しようとしています。 – majidarif
こんにちは - はい、上記のコードの最後のセクションが機能していることが証明されました。 ADDITIONAL 2というセクションの下にあるものはすべて私のために働いていました。 – binarydogs