【问题标题】:error in system command to output系统命令输出错误
【发布时间】:2014-01-21 14:50:22
【问题描述】:

我想通过 perl 在循环中为输入文件(在 linux 中)运行 ext 软件(hmmer)命令。

我用了这条线

system "hmmbuild  $outfile $files";

其中 $outfile 是我的输出文件,而 $files 在我的输入文件中。 hmmbuild 是 ext 软件的命令。

当我运行程序时,它给了我输出文件 GLOB(0x1b94b220) 的错误代码。

谁能帮我解决我的错误以及如何纠正?

我也尝试了带有反引号和括号的 exec 命令。

这是我得到的确切输出消息。如何将结果打印到输出文件 ($outfile)?

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `hmmbuild --amino GLOB(0x11eb3220) aproNOG00001'

脚本放在这里..

 #!/usr/bin/perl
 use Bio::AlignIO;
 use Bio::Align::AlignI;

 my $allfiles= 'allfilenames_alpha_hmms.txt';
  system "module load hmmer/3.1b1";
print "loaded hmmer\n";
 open(FIH, $allfiles);
 while ($min=<FIH>)
{ chomp($min);   my @pats=split " ",$min;
     foreach my $files(@pats)  {

     print $files; print "\n";

open(my $outfile,  '>',"$prefix.hmm");  

system "hmmbuild --amino $outfile $files";

print $outfile;
print "file saved\n";

# }
  }
 }
  print "\n\n\n\t   ###\tDONE\t###   \n\n";

【问题讨论】:

  • 用您使用的语言标记您的问题,在这种情况下是 Perl。
  • 另外,GLOB 不是错误代码,这是您的结果。您需要阅读文档和/或示例。
  • $outfile 不是文件,而是变量。它的值不能是文件。这些可以在磁盘上找到。它可能应该是一个文件 name,但它似乎是一个文件 handle
  • 您可能使用open 使用$outfile 作为文件句柄(第一个参数)。您的程序很可能需要$outfile 中的文件名,而不是文件句柄。
  • 明确地说,虽然它很可能需要一个文件名,但它绝对不需要文件句柄。除了字符串作为参数传递给程序是不可能的。

标签: perl command system output


【解决方案1】:

如何将结果打印到输出文件 ($outfile)

我认为hmmbuild 需要文件路径?传递文件的路径,而不是 $outfile 中的路径。

system "hmmbuild --amino $prefix.hmm $files";

【讨论】:

  • 所以去掉open,改成system "hmmbuild --amino $prefix.hmm $files";
  • ... 除了$prefix 似乎没有定义。
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 2014-08-16
  • 2012-09-13
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多