你真的懂perl里面的print, print STDOUT, print STDERR么?
Posted 集成电路设计及EDA教程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的懂perl里面的print, print STDOUT, print STDERR么?相关的知识,希望对你有一定的参考价值。
《程序员笑话一则》
老板:小程,下班前新版本一定要上线!
小程:好的。
第二天,老板上班,问小程:新版本怎么还没上线?
小程:我还没下班呢。
《你真的懂perl里面的print, print STDOUT, print STDERR么?》
建议横屏观看。
先讲下前因后果。
--------------------------------------------------------------------------------------
#################### 遇到问题 ####################
1、在当时设计用Perl发送邮件的时候,等待的过程本想让脚本print “.”的,根据点的个数可以看程序到底有没有执行,执行了多长时间,ICV检查DRC也有这样一个显示。可是怎么设计都不行,无论等多久,屏幕上就是没有“.......................”,后来只能用print "wait "来代替了。该脚本见推文:
后来才发现,原来print有一个“行缓冲”问题。不应该用print “.”,而应该用print STDERR "."的。最终实现效果:
--------------------------------------------------------------------------------------
#################### 举个栗子 ####################
先举个栗子:
#!/usr/bin/perl
use strict;
use Term::ANSIColor;
print "Hello World! ";
print "Hi, nice to meet you!";
print STDERR color 'red';
print STDERR "ERROR: ";
print STDERR color 'reset';
print STDERR "can't find files. "
#注:print color 是perl里面打印含颜色字体的方式,不懂的可以百度下撒。
你猜执行结果是什么?
是这样么?不对,正确的结果是:
--------------------------------------------------------------------------------------
#################### 结论 ####################
根据该结果说下print、print STDOUT、print STDERR的区别:
print:
和print STDOUT一样。
perl中的print函数是行缓冲。当碰到 ,print就立即把“标准输出”打印出来。
因此打印内容的第一行是:Hello World!
而后面的“Hi, nice to meet you!”因为没有碰到换行,所以先存在缓冲区,等到缓冲区满了再打印。
print STDERR:
print STDERR错误输出是没有缓冲的一旦遇到就立即打印出来。
因此我们看到第二行打印的内容是“ERROR: can't find files.”因为在print关键字“ERROR”的时候设置了color,所以它含有颜色而“can't find files.”不含颜色。
--------------------------------------------------------------------------------------
############## 问题结束了?这么简单? ###########
你可能会想,哦,就这么简单呀,我早就知道了。
哈哈,问题没有这么简单,鉴于问题比较多,后边再接着讲,见下篇推文:
《EDA工具执行的某些结果没有print到log里面?吐出的log有些神秘诡异的代码,如何去除?》
相关历史推文:
公告
网易云课堂课程
链接:https://study.163.com/course/introduction/1005909004.htm
《Calibredrv教程-提高流程自动化》
《搭建IC设计的EDA虚拟机/服务器》
以上是关于你真的懂perl里面的print, print STDOUT, print STDERR么?的主要内容,如果未能解决你的问题,请参考以下文章