【问题标题】:Can i somehow avoid giving a subscript a real file?我能以某种方式避免给下标一个真实的文件吗?
【发布时间】:2015-05-05 04:08:28
【问题描述】:

我必须为一个巨大的蛋白质组文件计算很多东西,如果我在数据集中有大约 30000 个蛋白质。 我有一个脚本,其中有很多需要单个蛋白质文件的子脚本

在 perl 中:

my output = `somescript -do_something -with_this_single_protein_file`

我想问一下,有什么方法可以避免将数据集分成 30000 个文件,每个文件都包含一个蛋白质?也许在 Python 中有没有办法给 Popen 一个 stringIO、一个文件处理程序或其他东西?

谢谢,加博尔

【问题讨论】:

  • 如果somescript 不接受- 作为读取标准输入的文件名,它是否接受/dev/stdin?
  • 这不是有效的 Perl。也许my $output = ...;?
  • 每个蛋白质真的有单独的下标吗?
  • 使用一个 Perl 脚本来调用下标,并使用require 将它们拉入而不是通过exec 或shell 调用它们会更有效,这就是反引号做。您将调用 Perl 编译器一次而不是 30000 次。
  • 我所做的事情是制作 30000 个文件,每个文件包含一种蛋白质,列出它们的名称,然后遍历它们,这样我就可以调用 my $output =`somescript -do_something n_th_protein`;我想避免制作 30000 个文件

标签: python perl file


【解决方案1】:

您可以使用 Bash 的process substitution 自动创建您需要的临时文件。

while(<DATASET>) {
   my $output = system("/bin/bash", "-c", "somescript -do_something -with_this_single_protein_file <(echo \"$_\")");
}

【讨论】:

  • 那么为什么要使用 Perl 作为包装脚本呢? while read -r protein; do somescript -do_something -with_this_single_protein_file &lt;(echo "$protein"); done &lt;dataset
  • @triplee 这样更好。我假设这应该是更大脚本的一部分。
猜你喜欢
  • 2016-12-13
  • 2023-02-14
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多