如何将perl代码输出到STDOUT / STDERR和一个文件,实时和跨平台?
发布时间:2020-12-15 21:16:24 所属栏目:大数据 来源:网络整理
导读:我需要将正常Perl代码的输出同时输出到屏幕和日志文件中.但问题是工具的运行时间可能是几小时.使用Capture :: Tiny的tee意味着只有在脚本终止后才会写入日志文件,这不是很有用. 为了进一步复杂化,我需要从同一进程以及使用system()调用的进程捕获直接perl的
我需要将正常Perl代码的输出同时输出到屏幕和日志文件中.但问题是工具的运行时间可能是几小时.使用Capture :: Tiny的tee意味着只有在脚本终止后才会写入日志文件,这不是很有用.
为了进一步复杂化,我需要从同一进程以及使用system()调用的进程捕获直接perl的输出. 最后,由于雇主的限制,它也需要在Win32上运行. 我还有其他选择吗? 解决方法
使用
PerlIO::Util.
刚刚在Strawberry Perl 5.12.1 32 bit下进行了测试,它运行得很好,所以它将是跨平台的.以下代码完全按照您的预期执行.并且由于它修改了实际的STDOUT和STDERR文件句柄,因此对它们的任何写入都将自动进行. use strict; use warnings; use IO::Handle; use PerlIO::Util; use 5.012; for (*STDOUT,*STDERR) { $_->autoflush; $_->push_layer(tee => ">>stdout.txt"); } for (1..10) { say $_; warn $_ unless $_ % 2; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |