【问题标题】:how can I print to STDOUT in perl module if it is redirected in main script如果在主脚本中重定向,我如何在 perl 模块中打印到 STDOUT
【发布时间】:2013-01-09 07:15:40
【问题描述】:

我在 Perl 脚本中重定向了 STDOUT。我在模块中打印的所有内容都被重定向到一个文件。有没有办法在 Perl 模块中恢复 STDOUT

这是我的例子

require my_module;

open(STDOUT, ">$outlog") || die "Error stdout: $!";
open(STDERR, ">>$outlog") || die "Error stderr: $!";

my_module::my_func();

所以我想在my_module::my_func() 函数中在STDOUT 上打印一条消息并退出。

【问题讨论】:

标签: perl stdout


【解决方案1】:

实际上,除非您将 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】:

    似乎我找到了解决方案。首先我将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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2021-09-08
      • 2017-01-23
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      相关资源
      最近更新 更多