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

Vil*_*e M 7 perl backticks

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

print `someshellscript.sh`;
Run Code Online (Sandbox Code Playgroud)

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

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

Gre*_*ill 16

你可能想做的是这样的:

open(F, "someshellscript.sh|");
while (<F>) {
    print;
}
close(F);
Run Code Online (Sandbox Code Playgroud)

这将运行someshellscript.sh并打开一个读取其输出的管道.的while循环读取由脚本并打印生成的输出的每一行.有关更多信息,请参见打开的文档页面.

  • 我唯一要补充的是,使用词法文件句柄通常更好:打开我的$ fh,"someshellscript.sh |" 或死!$ ;; (4认同)
  • @Nathan:(1)你不能意外地破坏包含范围内的现有文件句柄; (2)当对文件句柄的所有引用消失时(通常在作用域出口处),词法文件句柄将自动关闭. (3认同)