将子进程中的stdout传递给想要从stdin读取的模块(pysam)

时间:2014-08-18 20:36:55

标签: python bioinformatics

我正在尝试在python中编写管道并正确使用子进程而不是调用shell=True。生物信息学中的一个常见任务是将序列与诸如bwa的程序对齐,并将sam格式的结果传递给samtools以进行下游处理。 python包pysam帮助我完成samtools所做的所有任务,但是在python中。

我想将调用结果从对齐bwa传递给pysam,而无需写入文件。

Pysam允许您打开Samfile对象,输入文件设置为"-",它将从标准输入读取。同样,bwa将其结果写入stdout。

到目前为止我写的方式是:

bwa_call = ["bwa", "mem", "-v", "1", "-t", str(cores), index, fwd, rev]
bwa = subprocess.Popen(bwa_call, stdout=subprocess.PIPE)
samfile = pysam.Samfile("-", "r")

这似乎有效,因为我没有看到bwa的stdout输出,但问题是pysam不知道文件何时完成,所以只是等待。

有没有一种方法可以将stdout从bwa直接传递到pysam而无需写入文件?

0 个答案:

没有答案