【问题标题】:Perl backticks not capturing outputPerl反引号不捕获输出
【发布时间】: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:不,awkprint 默认写入标准输出。 (此外,如果输出到 STDERR,那么我们会在控制台中看到它,正是因为它不会被反引号捕获。)
  • @David-SkyMesh,是的,该文件确实包含输出。 pastie.org/private/s0jbcrvndrryqwyvuz8q

标签: perl debugging backticks


【解决方案1】:

这个程序运行了一段时间,然后就坏了。想不通为什么。将我的开发设置移动到另一台虚拟机后,我发现使用 nfdump 的绝对路径 可以修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多