我正在开发一个与名为 Dazzle 的 USPS 运输包接口的系统。该系统的一部分包括一个监控守护进程,其目的是获取制表符分隔的值文件,将它们转换为 Dazzle 识别的 XML,并将它们传递给 Dazzle 以生成标签。这部分工作得很好。然而,我还想做的是解析 Dazzle 生成的输出文件并将其导入数据库。
请注意,Dazzle 在 Windows 上运行。我的监控守护程序是用 Perl 编写的,并在 Linux 上运行。我的 Linux 系统通过 Samba 挂载了 Dazzle 的输入和输出目录。
Dazzle 开始写入输出文件的时间和它完成的时间之间有一个可测量的延迟。我想知道的是如何等待 Dazzle 完成输出文件的写入?我试过打开文件并对其进行flock($fh, LOCK_SH)
操作,但这似乎没有任何好处。
编辑:我有一个基于下面“mobrule”评论的想法。Dazzle 以 XML 格式编写输出文件。货件中的每个包裹都附在标签中,整个文件都附在标签中。因此,如果我在文件完成之前开始阅读文件,我可以在采取行动之前等待适当的结束标记。
另外,我应该提到我目前正在做的事情。当我检测到输出 XML 文件已创建时,我尝试对其进行解析。如果解析失败,我会睡觉并重试。如果失败,我会睡两倍的时间,然后再试一次,依此类推。这在 64 秒超时的测试中效果很好。