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



我想首先说,非常感谢您的帮助。我是Python和脚本的新手。我正在尝试使用一个名为samtools视图的程序将文件从.sam转换为.bam。我需要能够在Python:中执行BASH命令

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中,我仍然没有得到samtools来将.sam转换为.bam文件。我做错了什么?

Abukamel是对的,但如果你(或其他人)对你的具体例子感到疑惑。。。。

你离第一次尝试不远了,只有几个小项目:

  1. 文件名应加引号
  2. samtools从命名的输入文件读取,而不是从stdin读取
  3. 你不需要"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))

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

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

最新更新