pythonftpftplibpython-watchdog

How to check for change in the directory at FTP server?


I want to get the file from FTP server to local as soon as new file is added in directory on FTP.

I know changes in the directory at local machine can be seen using watchdog observer.

But I want to check for the change in the directory (addition of new file, deletion on file) at FTP server.

How to achieve this?

Code I am using to check change in the directory on local machine:

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

class ExampleHandler(FileSystemEventHandler):
    def on_created(self, event): 
        print "Got event for file %s" % event.src_path 

session = ftplib.FTP('address','username','password')
path='/directory/to/check'
session.cwd(path) 
observer = Observer()
event_handler = ExampleHandler() 
observer.schedule(event_handler, path_of_the_directory)
observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()

observer.join()

Solution

  • The FTP protocol has no API to notify a client about changes.

    If FTP is your only interface to the remote file system, the only solution is polling the FTP folder for changes periodically.

    See for example Monitor remote FTP directory.