【发布时间】:2014-01-04 07:06:22
【问题描述】:
我有以下程序sn-p
my $nfdump_command = "nfdump -M /data/nfsen/profiles-data/live/upstream1 -T -R ${syear}/${smonth}/${sday}/nfcapd.${syear}${smonth}${sday}0000:${eyear}/${emonth}/${eday}/nfcapd.${eyear}${emonth}${eday}2355 -n 100 -s ip/bytes -N -o csv -q | awk 'BEGIN { FS = \",\" } ; { if (NR > 1) print \$5, \$10 }'";
syslog("info", $nfdump_command);
my %args;
Nfcomm::socket_send_ok ($socket, \%args);
my @nfdump_output = `$nfdump_command`;
my %domain_name_to_bytes;
my %domain_name_to_ip_addresses;
syslog("info", Dumper(\@nfdump_output));
foreach my $a_line (@nfdump_output) {
syslog("info", "LINE: " . $a_line);
}
错误:@nfdump_output 为空。
$nfdump_command 正确,单独运行时打印输出
【问题讨论】:
-
如果您在 shell 中执行命令并添加
1>/tmp/file,/tmp/file是否包含所需的输出?如果不是,可能您的命令正在打印到 STDERR 而不是 STDOUT。捕获 STDERR 或 STDOUT+STDERR 的最简单方法是使用模块Cature::Tiny。 -
无法运行你的命令很难说。几个问题 - 你能打印变量 $nfdump_command。如果删除 awk,nfdump 的输出是什么。
-
@justintime,我已经在屏幕截图中打印了 $nfdump_command。没有 awk 的输出:pastie.org/private/zsdki76zq25mp2azwzhyg
-
@David-SkyMesh:不,
awk的print默认写入标准输出。 (此外,如果输出到 STDERR,那么我们会在控制台中看到它,正是因为它不会被反引号捕获。) -
@David-SkyMesh,是的,该文件确实包含输出。 pastie.org/private/s0jbcrvndrryqwyvuz8q