Subprocess.run () внутри цикла - PullRequest
0 голосов
/ 24 мая 2019

Я хотел бы зациклить файлы с помощью 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 голосов
/ 25 мая 2019

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)
0 голосов
/ 24 мая 2019

Похоже, ты слишком усложняешь это.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...