File Watchers¤
A receiver that watches for file events.
Usage¤
A FileWatcher receiver can be used
to watch for changes in a set of files. It will generate an
Event message every time a file is
created, modified or deleted, depending on the type of events that it is configured
to watch for.
The event message contains the
type of change that was observed and
the path where the change was
observed.
Note
The owner of the FileWatcher
receiver is responsible for recreating the FileWatcher after it has been
cancelled or stopped.
For example, if a Task uses an asynchronous iterator to consume
events from the FileWatcher and the task is cancelled, the FileWatcher will
also stop. Therefore, the same FileWatcher instance cannot be reused for a new
task to consume events. In this case, a new FileWatcher instance must be created.
Event Types¤
The following event types are available:
Example¤
Watch for changes and exit after the file is modified
import asyncio
from frequenz.channels.file_watcher import EventType, FileWatcher
PATH = "/tmp/test.txt"
file_watcher = FileWatcher(paths=[PATH], event_types=[EventType.MODIFY])
async def update_file() -> None:
await asyncio.sleep(1)
with open(PATH, "w", encoding="utf-8") as file:
file.write("Hello, world!")
async def main() -> None:
# Create file
with open(PATH, "w", encoding="utf-8") as file:
file.write("Hello, world!")
async with asyncio.TaskGroup() as group:
group.create_task(update_file())
async for event in file_watcher:
print(f"File {event.path}: {event.type.name}")
break
asyncio.run(main())