我制作了一个脚本,用于检测位于特定目录中的文件的更改。我试图将所有这些更改写入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 :(得分: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)
并查看输出而不是输出到文件中。
另一个好处是:使用上下文管理器可以确保文件正确关闭,即使发生错误也是如此。