The program uses the AnyEvent event loop. The program should read new lines that sometimes (rarely) appear in a text file on the local file system. As I understood, AnyEvent::io can not be used. What can I advise to read new lines from a file?
1
There are 1 answers
Related Questions in PERL
- Perl Regex for converting query strings
- Cross compiling perl for Android ld.lld: error: unable to find library -lpthread
- Regexp to remove small numbers and leave large ones
- `df` command not capturing entire output in perl
- Webmin CentOS7 AWS backup errors - perl(S3::AWSAuthConnection) can't be installed
- How to ignore perm errors with Path::Tiny 'visit'? (Windows)
- Why does setting `*\` to a scalar (string) reference not result in auto printing
- Regex for deconstructing SQL where statement
- Random characters in DS record from Net::DNS:RR when calling print/string
- Perl with Selenium: cannot save the Web page with Ctrl+S
- openssl pbkdf2 and perl
- Strawberry Perl using a separate winlibs distro
- Perl / Undefined value as a HASH reference when running SNMP queries
- Timestamp with timezone: works with isql but not with DBD::Firebird
- Slurping a file ... syntax error - example from perldoc
Related Questions in ANYEVENT
- How to make anyevent "sequential"?
- Unable to read client's message using AnyEvent::Socket and tcp_connect (to a UNIX domain socket)
- Convert deprecated Perl's Net::IRC codes to AnyEvent::IRC::Client inquiry
- Perl's AnyEvent::IRC::Client library does not close after sending messages
- AnyEvent tcp server-client example for localhost hangs when not using TLS
- AnyEvent::WebSocket::Client finish callback not called
- Perl: multithreaded server with Coro and AnyEvent
- Avoid Mojolicious async beviour? Avoid "AnyEvent::CondVar: recursive blocking wait attempted"
- How to make external command's output autoflush with AnyEvent::Subprocess?
- Perl Error when requesting proxy to https site. AnyEvent status 596
- Monitoring and reading new lines in a file?
- Parallel processing using AnyEvent (Any) module with custom function
- Can't install AnyEvent::DBI with Cpan on macOS High Sierra
- What is best way in Perl to set a timer to stop long-running process?
- Does AnyEvent work with perl 5.26?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
One way is to "watch" the file with a tool that tracks and reports events on filesystem objects.
An example using Linux::Inotify2, based on the synopsis in module's documentation
The monitor can be used with many major event handling tools. This example uses AnyEvent.
First create the file
growing.txt, presumably with some content. Then start the program and put it in the background (watcher.pl &), when its lines are printed. Then add to the fileand the watcher prints
Please see this post for a little more and some general comments, and study the module's docs and
man inotifyon your system.To do this along with other things you can put it in a forked process and send changes to the parent as they come (via
pipe,socketpair, or files). Any events that happen during the processing are still detected, and delivered as new events once the control returns.The parent can deal with the question of when to read by doing its other work in a loop with a non-blocking
IO::Select::can_read, or with a signal handler for a user signal (SIGUSR1) which the child sends after writing to its pipe end.This is an outline of something that isn't quite simple. There are also ready solutions. Some options from the
AnyEventecosystem are AnyEvent::Fork and friends, AnyEvent::Subprocess with its "delegates" mechanism, AnyEvent::Handle to watch that pipe for when it can be read.All these require an event loop as well, in which case all work is done in handlers (callbacks). Then the main work can be done in an "idle watcher," for instance, but this may turn out a bit convoluted and in this particular case the outlined manual approach for the child management may end up being clearer.
The most suitable management of the monitor depends on the details of your program.
If the file is changed in a way that changes the inode, the code above won't be able to detect that. This can happen with many common tools, like
zip,rsync, etc. To secure against that, along with possible file disappearance, you can use other flags so to detect those events.For the inode change it is
IN_ATTRIBthat is fired.Then you may need to re-open the file (and perhaps first find it). A separate directory monitor would be very helpful here. All this can also be done by using a directory monitor alone.