2

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

print `command`; 

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

谢谢,戴夫

4

1 回答 1

8

您不能使用反引号来执行此操作,因为它们只有在执行完成后才会返回到 Perl 程序。

所以,

print  `command1; command2; command3`;

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

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

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

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

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

open (my $cmds, "-|", "command1; command2; command3");
open (my $outfile, ">", "file.txt");
while (<$cmds>) {
        print;
        print $outfile $_;
}
close $cmds;
close $outfile;
于 2010-07-31T11:37:50.433 回答