我怎样才能摆脱Perl中的STDERR

Sun*_*nny 7 perl redirect system-calls stderr

我在Perl中使用了一些系统命令.

在下面的例子中,我获得如下输出:

ls: import-log.*: No such file or directory

ls: error-log.*: No such file or directory

No specified files found for deletion
Run Code Online (Sandbox Code Playgroud)

我的代码:

sub monthoryear() 
{

  @importlog = `ls -al import-log.*`;

  @errorlog = `ls -al error-log.*`;

}
Run Code Online (Sandbox Code Playgroud)

即使没有文件,我也不希望在输出中看到以下内容.

ls: import-log.*: No such file or directory &

ls: error-log.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

DVK*_*DVK 14

虽然其他答案对于您提出的确切技术问题是正确的,但您还应该考虑不在Perl中编写有效的shell脚本.

您应该使用Perl本地方法获取文件列表(例如glob()File::Find),而不是调用反向链接ls.


sha*_*rey 7

将STDERR重定向到空设备:

use File::Spec;
open STDERR, '>', File::Spec->devnull() or die "could not open STDERR: $!\n";
Run Code Online (Sandbox Code Playgroud)


Car*_*rum 5

您可以stderr在subshel​​l命令中添加重定向:

@importlog = `ls -al import-log.* 2>/dev/null`;
@errorlog = `ls -al error-log.* 2>/dev/null`;
Run Code Online (Sandbox Code Playgroud)

  • 要捕获STDERR,请参阅[perlfaq8:如何从外部命令捕获STDERR?](http://search.cpan.org/perldoc?perlfaq8#How_can_I_capture_STDERR_from_an_external_command?) (2认同)