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)