我正在使用perl back-ticks语法来运行一些命令。
我想将命令的输出写入文件并打印到stdout。
我可以通过在我的后面标记的字符串的末尾添加>
来完成第一个,但是我不知道在输出生成后立即打印输出。如果我做了像
print `command`;
仅在command
完成执行后打印输出。
谢谢, 戴夫
答案 0 :(得分:8)
你不能用反引号来做,因为只有在执行结束时它们才会返回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;