我正在尝试在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
而无需写入文件?