4

STDOUTPerl スクリプトでリダイレクトしました。モジュールで印刷するものはすべてファイルにリダイレクトされます。STDOUTPerl モジュールで復元する方法はありますか?

これが私の例です

require my_module;

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

my_module::my_func();

STDOUTしたがって、my_module::my_func()関数内にメッセージを出力して終了したいと思います。

4

2 に答える 2

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....

:)

于 2013-01-09T12:11:08.913 に答える
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

于 2013-01-09T09:02:31.730 に答える