更新时间:2023-11-24 12:43:40
发布我的问题三个小时后,没有收到答案.但我终于实现了我正在寻找的简单示例.
Three hours after posting my question, no answer received. But I have finally implemented the simple example I was looking for.
我的灵感来自 saaj 的 answer 并且基于 xml.sax
和 watchdog
一个>.
My inspiration is from saaj's answer and is based on xml.sax
and watchdog
.
from __future__ import print_function, division
import time
import watchdog.events
import watchdog.observers
import xml.sax
class XmlStreamHandler(xml.sax.handler.ContentHandler):
def startElement(self, tag, attributes):
print(tag, 'attributes=', attributes.items())
self.tag = tag
def characters(self, content):
print(self.tag, 'content=', content)
class XmlFileEventHandler(watchdog.events.PatternMatchingEventHandler):
def __init__(self):
watchdog.events.PatternMatchingEventHandler.__init__(self, patterns=['*.xml'])
self.file = None
self.parser = xml.sax.make_parser()
self.parser.setContentHandler(XmlStreamHandler())
def on_modified(self, event):
if not self.file:
self.file = open(event.src_path)
self.parser.feed(self.file.read())
if __name__ == '__main__':
observer = watchdog.observers.Observer()
event_handler = XmlFileEventHandler()
observer.schedule(event_handler, path='.')
try:
observer.start()
while True:
time.sleep(10)
finally:
observer.stop()
observer.join()
在脚本运行时,不要忘记touch
一个XML文件,或者使用以下命令模拟即时写入:
While the script is running, do not forget to touch
one XML file, or simulate the on-the-fly writing using the following command:
while read line; do echo $line; sleep 1; done <in.xml >out.xml &