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

Jay*_*u12 1 python subprocess

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

subprocess.call('samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam')
Run Code Online (Sandbox Code Playgroud)

'-bq' 后面的参数需要是一个整数值。但是我相信 subprocess.call 一直将其视为字符串,因此我不断收到错误“TypeError: bufsize must be an integer”。

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

Mar*_*ers 5

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

subprocess.call(['samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam'])
Run Code Online (Sandbox Code Playgroud)

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

subprocess.call('samtools view -bq 1 DS130.bam > DS130umr.bam', shell=True)
Run Code Online (Sandbox Code Playgroud)

让 shell 进行处理,或使用输出重定向:

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