【发布时间】:2013-07-12 16:36:24
【问题描述】:
我正在构建一个数据管道,将原始文件处理成二进制文件。文件很大并且有多个步骤,因此尽可能避免写入磁盘是有利的。获取一个子进程的输出并使其成为另一个子进程的输入很容易,但是如何处理需要多个输入文件的子进程呢?特别是:
我有两个进程对两个文件 A 和 B 进行操作,它们输出文件 A' 和 B'。下一条命令使用以下 shell 语法
bwa sampe referencefile A' B' A B
需要五个文件。如果 A' 和 B' 被写入磁盘,这可以通过 shell=True 轻松完成,但这是我想要避免的。如何实现 stdout -> stdin 关系以避免写入磁盘并保持正确的顺序?
【问题讨论】:
-
如果您使用 BWA 对齐配对末端读取,您的输入是一致的 fasta、两个索引文件和两个 fasta 文件,您的输出应该是一个 .sam 文件。为什么不想要 .sam 文件?您希望它直接转换为 .bam 吗?您是否尝试从 reads -> .sam -> .bam -> sorted.bam 不写入磁盘?
-
编辑:所以你有两个进程索引你的fasta文件(A,B),它们产生A',B'。然后您想与 BWA 对齐以生成 .sam 文件。为什么不想将索引保存到文件中?您始终可以将它们存储在
tempfile.NamedTemporaryFiles 中,这些在脚本退出时会被清理。您是否要将 .sam 文件存储到磁盘?另外,为什么不使用bwa mem ref.fa in1.fa in2.fa > aln-pe.sam?它删除了索引步骤,在内存中创建它们,这实际上就是你正在做的事情。您可能需要更新 BWA。 -
非常感谢,我不知道 tempfile 和 mem 解决方法。我都试过了,它们都有效
标签: python subprocess pipe bioinformatics