循环内的Subprocess.run()

时间:2019-05-24 18:48:22

标签: python for-loop subprocess

我想使用subprocess.run()遍历文件,例如:

import os
import subprocess

path = os.chdir("/test")
files = []
for file in os.listdir(path):
     if file.endswith(".bam"):
        files.append(file)

for file in files:
     process = subprocess.run("java -jar picard.jar CollectHsMetrics I=file", shell=True)

如何正确调用文件?

2 个答案:

答案 0 :(得分:0)

如果

shell=True中包含用户输入,则不安全。 @eatmeimadanish的答案允许任何可以在/test中写文件的人在您的计算机上执行任意代码。这是一个巨大的安全漏洞

相反,请提供subprocess.run调用的命令行参数列表。您可能还想传递check=True –否则,如果java命令失败,您的程序将毫无例外地完成!

import os
import subprocess

os.chdir("/test")
for file in os.listdir("."):
    if file.endswith(".bam"):
        subprocess.run(
            ["java", "-jar", "picard.jar", "CollectHsMetrics", "I=" + file], check=True)

答案 1 :(得分:-1)

似乎您可能过于复杂了。

import os
import subprocess

path = os.chdir("/test")
for file in os.listdir(path):
     if file.endswith(".bam"):
        subprocess.run("java -jar picard.jar CollectHsMetrics I={}".format(file), shell=True)