我想首先说任何帮助都非常感谢。我是Python和脚本的新手。我正在尝试使用一个名为samtools view的程序将文件从.sam转换为.bam我需要能够执行这个BASH命令在Python中执行的操作:
samtools view -bS aln.sam > aln.bam
我理解BASH命令就像| > <使用Python中的子进程stdin,stdout和stderr完成。我尝试了一些不同的方法,仍然无法正确转换我的BASH脚本。我试过了:
cmd = subprocess.call(["samtools view","-bS"], stdin=open(aln.sam,'r'), stdout=open(aln.bam,'w'), shell=True)
和
from subprocess import Popen
with open(SAMPLE+ "."+ TARGET+ ".sam",'wb',0) as input_file:
with open(SAMPLE+ "."+ TARGET+ ".bam",'wb',0) as output_file:
cmd = Popen([Dir+ "samtools-1.1/samtools view",'-bS'],
stdin=(input_file), stdout=(output_file), shell=True)
在Python中我仍然没有获得将.sam转换为.bam文件的samtools。我究竟做错了什么?
答案 0 :(得分:2)
Abukamel是对的,但如果你(或其他人)想知道你的具体例子......
你第一次尝试并不是太远了,只是一些小项目:
所以你可以这样做:
import subprocess
subprocess.call(["samtools", "view", "-bS", "aln.sam"],
stdout=open('aln.bam','w'))
您的第二个示例或多或少存在相同的问题,因此需要更改为:
from subprocess import Popen
with open('aln.bam', 'wb',0) as output_file:
cmd = Popen(["samtools", "view",'-bS','aln.sam'],
stdout=(output_file))
答案 1 :(得分:0)
您可以通过kwarg'hell = True'
将执行传递给shell subprocess.call('samtools view -bS aln.sam > aln.bam', shell=True)