在perl中使用bactticks将外部命令的输出存储到变量

在perl中使用bactticks将外部命令的输出存储到变量,perl,Perl,我使用以下代码将外部命令的输出存储在变量中。但是当我打印错误时,我什么也得不到 $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. 存储输出有什么问题吗?Perl

我使用以下代码将外部命令的输出存储在变量中。但是当我打印错误时,我什么也得不到

$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.

存储输出有什么问题吗?

Perl中的倒勾只捕获标准输出。如果hadoop将消息发送到标准错误,则backticks将不会捕获它。请参阅perlfaq答案,了解几种方法。最简单的方法是使用
2>&1
将标准错误文件描述符重定向到标准输出文件描述符:

$error1 = `hadoop fs -copyFromLocal $src_dir $tgt_dir 2>&1`;
诸如的模块也非常好