我已在Perl脚本中重定向STDOUT
。我在模块中打印的所有内容都被重定向到文件。有没有办法在Perl模块中恢复STDOUT
?
这是我的例子
require my_module;
open(STDOUT, ">$outlog") || die "Error stdout: $!";
open(STDERR, ">>$outlog") || die "Error stderr: $!";
my_module::my_func();
所以我想在STDOUT
函数的my_module::my_func()
上打印一条消息并退出。
答案 0 :(得分:2)
似乎我找到了解决方案。首先我将STDOUT
保存在主脚本中然后我在模块中使用它。
require my_module;
open(SAVEOUT, ">&STDOUT") || die "Unable to save STDOUT: $!";
open(STDOUT, ">$outlog") || die "Error stdout: $!";
open(STDERR, ">>$outlog") || die "Error stderr: $!";
my_module::my_func();
在my_module::my_func()
中,我在退出
open (STDOUT, ">&main::SAVEOUT") or die "Unable to restore STDOUT : $!";
print "a_module!!!\n";
我的打印邮件已发送至STDOUT
答案 1 :(得分:2)
实际上除非将其保存在其他位置,否则无法恢复STDOUT。
您可以执行以下操作:
# Save current STDOUT handle in OLDOUT
open (OLDOUT, ">&STDOUT") or die "Can't open OLDOUT: $!";
# Set STDOUT to a your output file
open (STDOUT, ">$youroutputfile") or die "Can't open STDOUT: $!";
# Do whatever you want to do here.......
# ...........
# Close STDOUT output stream
close (STDOUT);
# Reset STDOUT stream to previous state
open (STDOUT, ">&OLDOUT") or die "Can't open STDOUT: $!";
# Close OLDOUT handle
close (OLDOUT);
# Here your preview STDOUT is restored....
:)
答案 2 :(得分:-2)
你做不到。一旦行
open(STDERR, ">>$outlog")
已经投放,原来的STDOUT
已丢失。