如何在反引号中刷新输出在Perl中?

时间:2009-04-17 00:40:04

标签: perl backticks

如果我有这个perl应用程序:

print `someshellscript.sh`;

打印一堆东西并需要很长时间才能完成,如何在执行shell脚本的过程中打印输出?

看起来Perl只会在完成时打印someshellscript.sh结果,有没有办法在执行过程中进行输出刷新?

2 个答案:

答案 0 :(得分:16)

你可能想要做的是这样的事情:

open(F, "someshellscript.sh|");
while (<F>) {
    print;
}
close(F);

这会运行someshellscript.sh并打开一个读取其输出的管道。 while循环读取脚本生成的每行输出并打印出来。有关详细信息,请参阅open文档页面。

答案 1 :(得分:3)

这里的问题是,使用反引号转义会将脚本存储到字符串中,然后将其打印出来。因此,没有办法用印刷品“冲洗”。

使用system()命令应该连续打印输出,但是您将无法捕获输出:

system "someshellscript.sh";