【发布时间】:2012-05-14 23:36:31
【问题描述】:
我想在 perl 中运行一个外部命令并过滤一些行。 我不知道如何过滤去 stderr 的行。我现在有以下代码:
#!/usr/bin/env perl
use File::Spec;
#open STDERR, '>', File::Spec->devnull() or die "could not open STDERR: $!\n";
open(FILEHANDLE, '-|', 'Mycmd') or die "Cannot fork: $!\n";
open(STDERR, ">&FILEHANDLE");
while(defined(my $line = <FILEHANDLE>)) {
chomp($line);
if( $line =~ m/text1/ or
$line =~ m/text2/ or
$line =~ m/text3/
) {
# do nothing
}
else {
print "$line\n";
}
}
close FILEHANDLE or die "child error: $!\n";
一行
open(STDERR, ">&FILEHANDLE");
我尝试重定向 stderr 以便能够使用 stdout 处理它,但它不起作用。
该解决方案必须在 Windows 中运行。
【问题讨论】:
-
你先关闭
STDERR了吗?我认为您无法打开已经打开的FH。
标签: perl