当文件由另一个程序写入时,是否可以使用perlajax逐行读取文件?

当文件由另一个程序写入时,是否可以使用perlajax逐行读取文件?,第1张

概述它类似于这里提出的问题. How to read from file line by line using ajax request while file is written by other program using java?我有一个文件,它将填充从远程机器生成的命令行输出.我想做的是每次在文件中写入内容时,我想使用perl(或javascript但我很怀疑它)捕获它并显示正在打开的网页中 它类似于这里提出的问题. How to read from file line by line using ajax request while file is written by other program using java?我有一个文件,它将填充从远程机器生成的命令行输出.我想做的是每次在文件中写入内容时,我想使用perl(或JavaScript但我很怀疑它)捕获它并显示正在打开的网页中写入的内容.理想情况下,只要在文件中写入文件的方式,就应该在HTML中显示每一行,就像它在终端中生成的方式一样.

我的困难在于我不确定如何进行轮询 – 检测文件中正在写入的内容 – 以及如何实时捕获线条.

话虽这么说,我想到的另一种可能性是改变我在远程机器上的脚本并将终端输出转储到我的网站的div中.这样可以避免写入,阅读和实时轮询,但甚至不确定这是否可行?

解决方法 忽略AJAX一秒钟,Perl程序通常会使用 File::Tail.

使用AJAX,您可能需要重新实现file :: Tail.以下是基本版本:

#!/usr/bin/perluse strict;use warnings;use CGI          qw( );use Fcntl        qw( SEEK_SET );use Text::CSV_XS qw( decode_Json encode_Json );my $qfn = '...';{   my $cgi = CGI->new();   my $request = decode_Json( $cgi->param('POSTDATA') || '{}' );   my $offset = $request->{offset} || 0;   open(my $fh,'<:raw',$qfn)      or dIE("Can't open \"$qfn\": $!\n");   seek($fh,$offset,SEEK_SET)      or dIE("Can't seek: $!\n");   my $data = '';   while (1) {      my $rv = sysread($fh,$data,64*1024,length($data));      dIE("Can't read from \"$qfn\": $!\n") if !defined($rv);      last if !$rv;   }   $offset .= length($data);   print($cgi->header('application/Json'));   print(encode_Json({      data   => $data,offset => $offset,}));}
总结

以上是内存溢出为你收集整理的当文件由另一个程序写入时,是否可以使用perl / ajax逐行读取文件?全部内容,希望文章能够帮你解决当文件由另一个程序写入时,是否可以使用perl / ajax逐行读取文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存