我的方案:一个文本文件将继续说出一个文件夹,我需要检测新的文本文件,并从中读取特定信息,比如格式为(word:info ,或者在它下面写一个信息列,等等。并且,这个过程需要一直持续下去。
问题:我应该怎么做呢,我想使用perl scipt,但是从那里去哪里?,我正在获取想法,并且还在互联网上提供帮助,但我想问它可能会让我的想法更加清晰。
请帮助,请建议一条路径。
此致 chirayu已
答案 0 :(得分:1)
首先:你想要一个守护进程,所以你可能想看看Proc::Daemon。
第二件事,你需要阅读&解析你的文件。解析它,取决于它的格式,你的问题并不是很清楚。
最后,您可能需要考虑在处理时移动新检测到的文件(或重命名),然后(可能)在处理后删除它。这取决于您的要求。或者,您可能希望在处理完文件后将新检测到的文件移动到存档目录中。
答案 1 :(得分:0)
一种方法可能是定期(比如说每5秒,每5分钟或每5个小时,你的呼叫真的那样)的perl进程扫描所述目录,并且一出现任何新的文本文件,就会生成一个子进程处理它。
子进程可能是另一个perl脚本,它获取文本文件的名称作为其参数,它读取文件,检测您提到的单词,然后提取您感兴趣的信息(然后执行您认为必要的任何内容)有了这些信息)。
需要注意的事项是处理后如何处理文本文件。他们应该待在身边吗?然后你需要跟踪你已经处理了哪些,所以如果必须重新启动主进程(扫描目录并生成perl子进程),它们就不会再次处理 (由于崩溃或故意重启)。
如果文本文件在处理后应该会消失,那么我认为让孩子们在完成后删除它们或者让主进程删除它们是个好主意,前提是主进程总是等待孩子在继续跑步前完成。主进程等待子进程完成的缺点是,子进程不能并行运行,但必须按严格顺序运行(根据您的具体情况,不一定是缺点)。
(如果你有一个主进程总是在等待子进程运行,你实际上可以完全跳过子进程并在主程序中创建一个子程序来读取和处理文本文件)。
高级别描述,但希望它有所帮助。
答案 2 :(得分:0)
您使用的操作系统是什么?
在Windows上,您可以使用Win32::ChangeNotify,在Linux上,您可以使用Linux::Inotify2通知目录内容的更改。
您的脚本只需等待通知并在收到通知时采取操作,而不是轮询目录中的内容,这将浪费资源或可能会遗漏一些更改。