Perl 监视和读取文件中的新行?
程序使用AnyEvent循环。程序应该读取有时(很少)出现在本地文件系统的文本文件中的新行。据我所知,不能使用AnyEvent::io。我可以建议从文件中读取新行吗?一种方法是使用跟踪和报告文件系统对象事件的工具“监视”文件 基于模块文档中的概要,使用的示例Perl 监视和读取文件中的新行?,perl,anyevent,Perl,Anyevent,程序使用AnyEvent循环。程序应该读取有时(很少)出现在本地文件系统的文本文件中的新行。据我所知,不能使用AnyEvent::io。我可以建议从文件中读取新行吗?一种方法是使用跟踪和报告文件系统对象事件的工具“监视”文件 基于模块文档中的概要,使用的示例 use warnings; use strict; use feature 'say'; use AnyEvent; use Linux::Inotify2; my $file = shift @ARGV || 'growing.txt
use warnings;
use strict;
use feature 'say';
use AnyEvent;
use Linux::Inotify2;
my $file = shift @ARGV || 'growing.txt';
die "Usage: $0 file-to-watch\n" if not $file;
say '';
open my $fh, '<', $file or die "Can't open $file: $!";
print while <$fh>;
my $inotify = Linux::Inotify2->new or die "Can't create inotify object: $!";
$inotify->watch( $file, IN_MODIFY, sub {
my $e = shift;
if ($e->IN_MODIFY) {
print while <$fh>;
}
});
my $inotify_w = AnyEvent->io (
fh => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll }
);
1 while $inotify->poll;
“观察者”会打印
new line
another
对于inode更改,触发的是_ATTRIB中的
然后,您可能需要重新打开该文件(并且可能首先找到它)。单独的目录监视器在这里会非常有用。所有这些都可以通过单独使用目录监视器来完成。Um,请更好地解释一下——您的意思是捕获文件更改事件并读取对其所做的操作吗?还是别的什么?请显示“程序”的相关部分。文件系统上有一个文本文件(accept.txt),在开始时,perl脚本读取其中的行并继续工作。有时可以向文件中添加新行。添加这些行后,必须在程序中读取它们。@d您可以尝试“确定”,这将是Linux::Inotify2
检测更改的工作;例如,见。我可能会也可能不会在合理的时间范围内发布答案。您确实应该发布代码的相关部分。@Dmitry进一步编辑,并对可能的监视上下文进行注释
new line
another
$inotify->watch( $file,
IN_MODIFY |IN_ATTRIB | IN_MOVE_SELF | IN_DELETE_SELF,
sub {
my $e = shift;
my $name = $e->fullname;
if ($e->IN_MODIFY) {
print while <$fh>;
}
if ($e->IN_ATTRIB) { say "$name meatadata changed" }
if ($e->IN_MOVE_SELF) { say "$name was moved" }
if ($e->IN_DELETE_SELF) { say "$name was deleted" }
});