我想使用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)
如何正确调用文件?
答案 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)