检测文件中的更改并将其写入文件

时间:2016-10-13 14:20:47

标签: python file

我制作了一个脚本,用于检测位于特定目录中的文件的更改。我试图将所有这些更改写入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()

1 个答案:

答案 0 :(得分:0)

我推荐像

这样的东西
#!/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()

正如您所看到的,对输出将被写入的位置的控制权已交给调用者(实例MyHandler)而不是被调用者(on_modified)。

这意味着您也可以

event_handler = MyHandler(sys.stdout)

并查看输出而不是输出到文件中。

另一个好处是:使用上下文管理器可以确保文件正确关闭,即使发生错误也是如此。