我们的项目中有一个要求,即检测放入python目录中的任何内容。
这个过程是这样的:
每天几乎所有时间都会运行一个python脚本(一种cron作业),它会一直监视一个目录。
当有人将文件放入应检测文件的目录时。
>>> var.decode('utf-8')
Traceback (most recent call last):File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte
>>> var.from_bytes(2,'little')
Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: 'bytes' object has no attribute 'from_bytes'
命令使用console
简单地复制或移动文件。或者人可以执行{{1}来自其他计算机,或者可以通过我们的cp or mv
)我可以通过网络界面删除它,但不能通过其他方式检测它。
任何人都可以建议我检测丢弃文件的方法:
FTP transfer
答案 0 :(得分:0)
怎么样:
known_files = []
def detect_file(watch_folder_path):
files = os.listdir(watch_folder_path)
for file in files:
if file not in known_files:
#RAISE ALERT e.g. send email
known_files.append(file)
一旦提出警报,将文件添加到known_files
列表,以便它不会保持警报。
然后,您需要以自行决定的频率重复运行detect_files()
。我建议使用Timer
来实现此目的。或者更简单地说,在while True:
语句中执行此函数,然后添加time.sleep(60)
以每隔60秒运行detect_files()
检查。
答案 1 :(得分:0)
如果您不想对项目使用任何依赖项,则可以依靠脚本来计算文件的更改。假设此脚本将始终运行,您可以编写以下代码:
def is_interesting_file(f):
interesting_extensions = ['zip', 'json', 'xml', 'ini']
file_extension = f.split('.')[-1]
if file_extension in interesting_extension:
return True
return False
watch_folder_path = 0
previous_watched_files = set()
while True:
watched_files = set(os.listdir(watch_folder_path))
new_files = watched_files.difference(previous_watched_files)
interesting_files = [filename for filename in new_files if is_interesting_file(filename)]
#Do something with your interesting files
如果要使用此方法在cron或类似的东西上运行此脚本,您始终可以将目录列表保存在文件或简单数据库中作为sqlite,并将其分配给previous_watched_files
变量。然后,您可以进行一次迭代,查看目录以进行更改,清除数据库/文件记录,并使用更新的列表结果再次创建它们。