如何将整数值传递给python的subprocess.call方法?

时间:2014-01-21 18:48:39

标签: python subprocess

我试图将整数值传入python的subprocess.call方法:

subprocess.call('samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam')

'-bq'之后的参数需要是一个整数值。但是我相信subprocess.call会将它视为一个字符串,所以我不断收到错误'TypeError:bufsize必须是一个整数'。

如何让subprocess.call将'1'解释为整数值?

1 个答案:

答案 0 :(得分:4)

这与输入中的整数无关;你错误地调用了这个函数。您需要将命令作为一个序列传递,列表:

subprocess.call(['samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam'])

但是,这不会由shell处理,因此输出重定向(>)将不起作用。如果要将工具的输出定向到另一个文件,请使用shell=True并传入一个字符串:

subprocess.call('samtools view -bq 1 DS130.bam > DS130umr.bam', shell=True)

要处理的shell,或使用输出重定向:

with open('DS130umr.bam', 'wb') as redirected:
    subprocess.call(['samtools','view','-bq', '1','DS130.bam'], stdout=redirected)