perl – 为什么在STDERR线之后打印STDOUT线?
发布时间:2020-12-15 23:24:12 所属栏目:大数据 来源:网络整理
导读:我完全不理解这种行为. 我有一个非常简单的Perl脚本: #!/usr/bin/perluse strict;use warnings;print "line 1n";print STDERR "line 2n"; 如果我从控制台运行它,我会得到我期望的: $perl a.plline 1line 2 但如果我将其重定向到文件,我将按相反的顺序获
我完全不理解这种行为.
我有一个非常简单的Perl脚本: #!/usr/bin/perl use strict; use warnings; print "line 1n"; print STDERR "line 2n"; 如果我从控制台运行它,我会得到我期望的: $perl a.pl line 1 line 2 但如果我将其重定向到文件,我将按相反的顺序获取行: $perl a.pl &> a $cat a line 2 line 1 如何使用相同的方法将所有输出STDOUT STDERR捕获到文件中 解决方法
这是缓冲的效果.当输出到终端时,Perl(就像stdio一样)使用基于行的缓冲,这将产生预期的效果.输出到文件时,它使用块缓冲(通常为4k或8k块),因此它只会在程序结束时刷新.
您观察到的差异是因为STDERR是无缓冲的,与大多数其他句柄不同. 解决此问题的最简单方法是使用$|在STDOUT上启用自动刷新特殊变量.有关详细信息,请参见perlvar. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |