使用看门狗,我希望它在某个目录中查找更新的文件,如果有更新的文件,它会抓取文件名并运行带有文件名的特定脚本,并将输出发送到另一个目录作为txt文件。 当文本文件出现在新目录中时,以某种方式获取文件的名称并将其设置为变量以进行分析。
EX:
第一个目录/path/to/first/dir/2017/04/27/nfcapd.20170427&l; - 新文件(通知,不是txt文件)
运行脚本以使用上面的文件名
获取下面该文件中的数据nfdump - r nfcapd.20170427>家庭/用户/ rmaestas / nfcapd.20170427.txt
文件名存储在一个与代码
一起使用的变量中updated = 'nfcapd.21070427.txt’
filename = ('home/users/rmaestas/') #<-- insert 'updated in directory'
with open(filename, 'r') as infile:
next(infile) #Skips the first row, first row is not data.
for line in infile:#read every line
if "Summary:" in line:#End of the data, last4 lines are a summary which won't be needed.
break
print(line.split()[4].rsplit(':', 1)[0])
#more code...
答案 0 :(得分:2)
您需要做的是创建一个继承了其中一个文件处理程序的类,并覆盖在更新文件时将调用的on_modified
方法,如此
class CustomFileEventHandler(FileSystemHandler):
def on_modified(self, event):
file_name = event.src_path #get's the path of the modified file
with open(file_name, "r") as infile, open("path/to/file.txt", "w") as result:
#call your function which should return a string
result.write(function output) #instead of print
没有必要追加家庭/用户/ rmaestas&#39;因为.src_path将为您提供文件的完整路径。
使用重写的FileSystemHandler,您需要设置Observer,它将实际进行监视,这与监视程序文档中给出的示例相似
event_handler = CustomFileEventHandler()
observer = Observer()
observer.schedule(event_handler, "path/to/dir", recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()