我正在尝试监视FTP服务器。
FTP服务器具有多个目录,并且将存在没有模式的新目录。因此,我正在轮询FTP服务器以使用以下代码模拟监视,
import config
import ftplib
import queue
from time import sleep
server = ftplib.FTP()
server.connect(config.ftp_server_address, config.ftp_server_port)
server.login(config.ftp_server_username,config.ftp_server_password)
def change_directory_monitor(dir='./'):
ls_prev = set()
while True:
ls = set(server.nlst(dir))
add, rem = ls-ls_prev, ls_prev-ls
if add or rem: yield add, rem
ls_prev = ls
sleep(5)
def change_file_monitor(directory):
ls_prev = set()
server.cwd(directory)
while True:
ls = set(server.nlst())
add, rem = ls-ls_prev, ls_prev-ls
if add or rem: yield add, rem
ls_prev = ls
sleep(5)
root_directory = list()
file_queue = queue.Queue()
for added_directory, removed_directory in change_directory_monitor():
for directory in added_directory:
root_directory.append(directory)
try:
for directory in removed_directory:
root_directory.remove(directory)
except:
pass
for directory in root_directory:
print(directory)
for added_file, removed_file in change_file_monitor(directory): #problem here
for file in added_file:
file_queue.put(file)
server.quit()
[当程序执行注释“问题在这里”的行时,它将停留在for循环中,并且永远不会离开,因为该函数会不断地将FTP目录池用于文件更改。
我想在监视所有目录的其他目录的同时,对所有FTP目录进行轮询。是否可以在程序的root_directory
和change_file_monitor
函数中使用目录并行运行以监视FTP目录?
或者我是否必须为每个目录手动运行python程序?
我最终创建了如下程序:
这是最无效率的方法,但这是一种快速解决方案。