如何将从另一个perl脚本执行的Perl脚本的输出重定向到文件?

时间:2011-09-16 00:24:20

标签: perl unix command-line redirect

我正在通过crontab运行perl脚本并将其输出重定向到文件:

30 1 * * * /full/path/to/my_script.pl >> /full/path/to/my_log_file

在my_script.pl中,我正在通过system()命令执行其他几个perl脚本:

#/usr/bin/env perl
system( "/full/path/to/another_script.pl" );

在这些脚本中,我使用'print'写入STDOUT:

#/usr/bin/env perl
print "Standard output...\n";

然而,似乎这些子脚本的输出都没有被​​重定向到my_log_file-我看到的唯一输出是父perl脚本的输出。我错过了一些明显的东西吗这是在linux系统上。

2 个答案:

答案 0 :(得分:1)

而不是system(),请使用qx

print qx( "/full/path/to/another_script.pl" );

答案 1 :(得分:0)

嗯,如果使用system(),那么STDOUT应该会在你的日志中结束。

你有一个例子吗?

我的直接想法是系统()调用实际上没有运行其他脚本 - 你是否使用脚本的完整路径?记住cron不会有你的shell所拥有的相同$ PATH,所以可能找不到你试图运行的脚本,除非它们有完整的路径。

您还可以在日志中捕获STDERR:     30 1 * * * /my_script.pl 2>& 1>> my_log_file