10

我正在执行一个 Perl 程序。无论在我的控制台上打印什么,我都想将它重定向到一个文本文件。

4

4 回答 4

18

首选方法是通过命令行处理重定向,例如

perl -w my_program.pl > my_output.txt

如果你还想包含 stderr 输出,那么你可以这样做(假设你的 shell 是 bash):

perl -w my_program.pl &> my_output.txt
于 2012-05-21T08:54:57.017 回答
11

在 CLI 中,您可以使用>,如下所示:

perl <args> script_name.pl > path_to_your_file

如果您想在 perl 脚本中执行此操作,请在打印任何内容之前添加此代码:

open(FH, '>', 'path_to_your_file') or die "cannot open file";
select FH;
# ...
# ... everything you print should be redirected to your file
# ...
close FH;  # in the end
于 2012-05-21T08:58:42.920 回答
6

在 Unix 上,要捕获发送到终端的所有内容,您需要重定向标准输出和标准错误。

使用 bash,命令类似于

$ ./my-perl-program arg1 arg2 argn > output.txt 2>&1

C shell、csh衍生工具如tcsh以及更新版本的 bash 理解

$ ./my-perl-program arg1 arg2 argn >& output.txt

意思相同。

Windows 上命令 shell 的语法类似于 Bourne shell 的语法。

C:\> my-perl-program.pl args 1> output.txt 2>&1

要在您的 Perl 代码中设置此重定向,请添加

open STDOUT, ">", "output.txt" or die "$0: open: $!";
open STDERR, ">&STDOUT"        or die "$0: dup: $!";

到程序可执行语句的开头。

于 2012-05-21T15:40:47.127 回答
3

如果您希望在控制台和日志上打印输出,则将此行附加到您的代码中(例如,在任何打印语句之前)

open (STDOUT, "| tee -ai logs.txt");
print "It Works!";

在您的脚本中最后一次打印之后

close (STDOUT);

仅对于错误消息,

open (STDERR, "| tee -ai errorlogs.txt");
于 2015-10-13T05:04:45.910 回答