我在Perl(Biomart)中使用打印出查询结果的包。打印输出的语法如下所示:
$query_runner->execute($query);
$query_runner->printResults();
然后将查询结果打印到终端。相反,我希望打印的内容打印到输出文件。我试过了:
$output = "@ARGV[1]";
open OUT , ">$output" or die "Can't open $output: @ARGV[1].txt!\n";
$query_runner->execute($query);
print OUT $query_runner->printResults();
但这似乎不起作用,子程序printResults()仍会打印到我的终端而不是输出文件。有没有办法将其输出打印到我的outputfile而不改变包本身的子程序?
答案 0 :(得分:5)
您可以使用select
设置默认的打印文件句柄,例如
select (OUT);
答案 1 :(得分:1)
您可以重新打开STDOUT以写入给定文件,调用打印子,然后恢复旧STDOUT:
open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
open STDOUT, '>', $ARGV[1] or die "Can't open $ARGV[1]";
$query_runner->printResults();
open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";
答案 2 :(得分:1)
来自https://github.com/pubmed2ensembl/biomart-plus-extras/blob/master/lib/BioMart/QueryRunner.pm:
sub printResults {
my ($self, $filehandle, $lines) = @_;
$filehandle ||= \*STDOUT; # in case no fhandle is provided
...
}
因此,printResults将文件句柄的可选参数输出到。如果未提供,则默认为STDOUT。您可以将其用作:
open(my $output, ">", $ARGV[1]);
$query_runner->execute($query);
$query_runner->printResults($output);