我如何立即收到命令输出?

Dav*_*d B 2 perl buffering backticks

我正在使用perl back-ticks语法来运行一些命令.我想将命令的输出写入文件并打印到stdout.我可以通过在>我的后面标记的字符串的末尾添加一个来完成第一个,但是我不知道热,以便在生成后立即打印输出.如果我做的事情

print `command`; 
Run Code Online (Sandbox Code Playgroud)

只有在command完成执行后才打印输出.

谢谢,戴夫

Vin*_*vic 8

你不能用反引号来做,因为只有在执行完成后它们才会返回Perl程序.

所以,

print  `command1; command2; command3`;
Run Code Online (Sandbox Code Playgroud)

将等到command3完成输出任何内容.

您应该使用管道而不是反引号来立即获得输出:

open (my $cmds, "-|", "command1; command2; command3");
while (<$cmds>) {
        print;
}
close $cmds;
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您必须查看是否要缓冲(取决于您希望输出的立即程度):遭受缓冲?

要打印和存储输出,可以打开()文件以将输出写入:

open (my $cmds, "-|", "command1; command2; command3");
open (my $outfile, ">", "file.txt");
while (<$cmds>) {
        print;
        print $outfile $_;
}
close $cmds;
close $outfile;
Run Code Online (Sandbox Code Playgroud)