我正在使用以下代码将外部命令的输出存储在变量中。但是当我打印错误时,我什么都没得到。
$error1 = `hadoop fs -copyFromLocal $src_dir $tgt_dir`;
print "$error1\n"; # --> prints nothing
` `
中命令的输出是:
copyFromLocal: Cannot create file/user/file5._COPYING_. Name node is in safe mode.
存储输出有什么问题吗?
答案 0 :(得分:1)
Perl中的反引号仅捕获标准输出。如果hadoop正在将消息发送到标准错误,则反引号将不会捕获它。有几种方法,请参阅How can I capture STDERR from an external command?的perlfaq答案。最简单的方法是使用2>&1
将标准错误文件描述符重定向到标准输出文件描述符:
$error1 = `hadoop fs -copyFromLocal $src_dir $tgt_dir 2>&1`;
Capture::Tiny之类的模块也非常好。