我想将我的Perl脚本的stdout和stderr复制到一个文件中,同时也将它保留在屏幕上,并且最好在脚本本身内部使用一些技巧.即我想要类似的东西
./test.pl 2>&1 | tee foo.bar
但隐藏在perl脚本实现中.目前我刚刚编写了一个子程序,可以在屏幕上和文件句柄上打印所有消息,但缺点是如果脚本死掉,则消息将不会出现在日志中.有办法吗?
请参阅Perl食谱中的"13.15.9.绑定示例:多个接收文件句柄"部分.
要知道的主要是 tie *TEE, "Tie::Tee", @handles;
注意:Tie :: Tee包是您需要自己创建的,代码在本书的相同部分.
注意:您可以这样做select(TEE),它将在每个常规print语句中使用,因此您不需要这样做print TEE xxx.
注意:要使任何STDERRy输出(包括die)转到相同的文件句柄,请将STDERR更改为TEE,如下所示:
use Tie::Tee;
use Symbol;
@handles = (*STDOUT);
push(@handles, $handle = gensym( ));
open($handle, ">/tmp/teetest.xxx");
tie *TEE, "Tie::Tee", @handles;
select(TEE);
*STDERR = *TEE;
print "raw print\n";
die "XXXX\n";
Run Code Online (Sandbox Code Playgroud)
输出将是:
raw print
XXXX
Run Code Online (Sandbox Code Playgroud)
文件内容如下:
raw print
XXXX
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4317 次 |
| 最近记录: |