gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:10:02 25 4
gpt4 key购买 nike

这类似于此处提出的问题 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,
}));
}

关于ajax - 当文件由另一个程序写入时,是否可以使用 perl/ajax 逐行读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com