perl - 如何立即收到命令输出?

标签 perl buffering backticks

我正在使用 perl 反引号语法来运行一些命令。 我希望将命令的输出写入文件并打印到标准输出。 我可以通过在我的反引号字符串的末尾添加一个 > 来完成第一个,但我不知道如何在生成输出后立即打印输出。如果我做类似的事情

print `command`; 

仅在 command 执行完毕后打印输出。

谢谢, 戴夫

最佳答案

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

所以,

print  `command1; command2; command3`;

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

您应该使用竖线而不是反引号以便能够立即获得输出:

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

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

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

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

关于perl - 如何立即收到命令输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3377879/

相关文章:

正则表达式不应匹配括号内的数字

perl - 在 __DATA__ 句柄中存储二进制数据

perl - 如何在不使用 Perl 中的 $b(比较)$a 的情况下对一个键进行升序排序,另一个键进行降序排序?

Android,如何显示来自 onBufferingUpdate 的缓冲百分比

bash - 如何在 Perl 中转义 <<() 习惯用法

php - ffmpeg:在php中使用返回的数据

Javascript:/e Javascript 中 RegExp 的修饰符

php - 第0行的PHP缓冲错误<未知>

python - 为什么使用线程的脚本偶尔会打印额外的行?

string - 是否可以针对反引号键入断言?