2016-10-13 5 views
0

特定のディレクトリにあるファイルの変更を検出するスクリプトを作成しました。私はこれらすべての変更をchanges.txtファイルに書き込もうとしています。この目的のために私はsys.stdout = open('changes.txt','w')命令を使用しています。ファイルの変更を検出してファイルに書き込む

問題は、スクリプトを実行してディレクトリ内のファイルを変更して保存するときに、changes.txtという空のファイルが作成されるという問題です。このファイルは決して書き込まれません!

#!/usr/bin/python 
import time 
import sys 
from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler 
sys.stdout = open('changes.txt','w') 

class MyHandler(FileSystemEventHandler): 
def on_modified(self, event): 
    print "something happened!" 


if __name__ == "__main__": 
event_handler = MyHandler() 
observer = Observer() 
observer.schedule(event_handler, path='.', recursive=False) 
observer.start() 

try: 
    while True: 
     time.sleep(1) 
except KeyboardInterrupt: 
    observer.stop() 
+0

ファイルを定期的に開き、 'f.write()'をそれだけで開いてみませんか? –

+0

あなたのプリント機能を書き直すほうがいいかもしれません。それ以外の場合は、一般に、スクリプトの出力を格納するために、 'python.py> changes.txt'を使用します。 –

+0

それは複雑です... @NilsWerner – adaminspaceship

答えて

0

私はあなたが見ることができるよう、あなたのoutputwillが書き込まれる場所を制御は、発信者(MyHandlerをinstanciating 1)の代わりに、呼び出し先に手渡されました

#!/usr/bin/python 

import time 
import sys 
from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler 

class MyHandler(FileSystemEventHandler): 
    def __init__(self, f): 
     self.f = f 
    def on_modified(self, event): 
     self.f.write("something happened!\n") 
     self.f.flush() 


if __name__ == "__main__": 
    with open('changes.txt','w') as f: 
     event_handler = MyHandler(f) 
     observer = Observer() 
     observer.schedule(event_handler, path='.', recursive=False) 
     observer.start() 

     try: 
      while True: 
       time.sleep(1) 
     except KeyboardInterrupt: 
      observer.stop() 

のようなものをお勧めします(on_modified)。

これはあなたにも

event_handler = MyHandler(sys.stdout) 

を行うと、出力の代わりに、出力をファイルに置かれて見ることができますを意味します。

さらに、コンテキストマネージャを使用すると、エラーが発生してもファイルが正しく閉じられていることを確認できます。

+0

ありがとうございます。しかし、スクリプトが毎回同じファイルに出力を保存し、古いファイルを上書きしないようにしたいのですが?また、起こったことに番号を付けてください!例えば。何かあった! #1 – adaminspaceship

+0

ファイルへの追加はPythonのドキュメントにあり、インクリメンタは 'MyHandler'メンバ変数で行うことができます。 –

+0

さて、ありがとう!!!! – adaminspaceship

関連する問題