使用python子流程将文件从.sam转换为.bam

使用python子流程将文件从.sam转换为.bam,python,linux,bash,shell,python-2.7,Python,Linux,Bash,Shell,Python 2.7,我想首先说,非常感谢您的帮助。一般来说,我对Python和脚本都是新手。我正在尝试使用一个名为samtools view的程序将文件从.sam转换为.bam。我需要能够完成此BASH命令在Python中所做的工作: samtools view -bS aln.sam > aln.bam 我知道像|>

我想首先说,非常感谢您的帮助。一般来说,我对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)


在Python中,我仍然没有使用samtools将.sam文件转换为.bam文件。我做错了什么

您可以通过kwarg'shell=True'将执行传递给shell


subprocess.call('samtools视图-bS aln.sam>aln.bam',shell=True)

Abukamel是正确的,但如果您(或其他人)想知道您的具体示例

你的第一次尝试并不遥远,只是一些小项目:

  • 文件名应该用引号括起来
  • samtools从命名的输入文件中读取数据,而不是从stdin中读取数据
  • 您不需要“shell=True”,因为您没有使用诸如重定向之类的shell技巧
  • 因此,您可以:

    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))
    

    非常感谢您的帮助,也感谢您带领我走过这一过程。
    from subprocess import Popen
    with open('aln.bam', 'wb',0) as output_file: 
        cmd = Popen(["samtools", "view",'-bS','aln.sam'],
                    stdout=(output_file))