加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:19:36 所属栏目:大数据 来源:网络整理
导读:它类似于这里提出的问题. 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/perl

use 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,}));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读