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

2024-06-25 06:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我想说,任何帮助都是非常感谢的。一般来说,我对Python和脚本还不熟悉。我尝试使用一个名为samtools view的程序将文件从.sam转换为.bam我需要能够执行以下BASH命令在Python中执行的操作:

samtools view -bS aln.sam > aln.bam   

我知道像|>;<;这样的BASH命令是使用Python中的子进程stdin、stdout和stderr完成的。我尝试了几种不同的方法,但仍然无法正确转换BASH脚本。我试过:

^{pr2}$

以及

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文件。我做错什么了?在


Tags: 文件命令脚本bashviewbssamwith
2条回答

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

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

Abukamel是对的,但是如果你(或其他人)想知道你的具体例子。。。。在

你离你的第一次尝试已经不远了,只是一些小项目:

  1. 文件名应该用引号括起来
  2. samtools从命名的输入文件读取,而不是从stdin读取
  3. 您不需要“shell=True”,因为您没有使用诸如重定向之类的shell技巧

所以你可以:

import subprocess
subprocess.call(["samtools", "view", "-bS", "aln.sam"],
                stdout=open('aln.bam','w'))

您的第二个示例或多或少有相同的问题,因此需要将其更改为以下内容:

^{pr2}$

相关问题 更多 >