我正在执行一个Perl程序。无论在我的控制台上打印什么,我想重定向 那是一个文本文件。
答案 0 :(得分:17)
首选方法是通过命令行处理重定向,例如
perl -w my_program.pl > my_output.txt
如果你还想包含stderr输出,那么你可以这样做(假设你的shell是bash):
perl -w my_program.pl &> my_output.txt
答案 1 :(得分: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
答案 2 :(得分: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: $!";
到程序可执行语句的开头。
答案 3 :(得分:2)
如果您希望在控制台和日志上打印输出,请将此行添加到您的代码中(例如,在任何打印语句之前)
open (STDOUT, "| tee -ai logs.txt");
print "It Works!";
在剧本中最后一次打印
close (STDOUT);
仅限错误消息,
open (STDERR, "| tee -ai errorlogs.txt");