subprocess.call с разными значениями для аргументов - PullRequest
0 голосов
/ 30 ноября 2018

Я новичок в Python с минимальным опытом в базовом программировании.Для биоинформационного анализа наборов данных я пытаюсь придумать сценарий, автоматизирующий большую часть этого.Анализ включает в себя запуск множественного последовательного марковского слияния (MSMC) для вывода эффективной истории популяции в Arabidopsis, модельном организме для многих исследований.

Требуемый сценарий будет выполнять следующее:

1)перебирать входные файлы, оканчивающиеся определенным окончанием, это адрес

for filename in os.listdir(input_directory):
   if filename.endswith(".multihetsep.txt")

и работает до сих пор.2) затем программное обеспечение для анализа вызывается на указанных файлах, и вот тут мне становится сложно;для ОДНОГО случая subprocess.call будет выглядеть следующим образом:

call (["./msmc_1.1.0_linux64bit","-I0,1","-p1*2+15*1+1*2","- o",outdir+filename,filename])                                   

с присваиванием outdir фиксированной строке и имени файла, очевидно, в зависимости от файла, который перебирается.

Для анализаскрипт должен иметь возможность включать значения от 0 до 27 в пары по 2 и использовать их внутри вызова для параметра -I, и в настоящее время я не вижу, как мне это сделать.Кроме того, он должен делать то же самое в парах 4,6 и 8. Та же самая проблема, в принципе, применима и к другим параметрам, поскольку у меня будут изменяющиеся значения для разных прогонов анализа.Кроме того, я изо всех сил пытаюсь найти информацию о том, как получить имена выходных файлов в строгом порядке.Допустим, для -I 0,1 я бы хотел добавить _1 к имени выходного файла (-o в этой программе указывает расположение вывода и префикс).Последний аргумент «имя файла» предоставляет входные файлы.Даже после многих исследований (Google, stackoverflow, Python books) мне не удалось найти решение этой проблемы.

Можно ли в принципе сделать это с помощью функции subprocess.call или мне нужнопо-другому?

Мой нынешний подход состоял в том, чтобы просто запустить скрипт оболочки, содержащий все желаемые сценарии, но, конечно, он довольно грязный и содержит много строк кода.

Весь мой кодна данный момент выглядит так:

#!/usr/bin/env python3.6
from subprocess import call
input_directory = "location of input files"
for filename in os.listdir(input_directory):
   if filename.endswith(".multihetsep.txt"):
        call (["./msmc_1.1.0_linux64bit","-I0,1","-p1*2+15*1+1*2","-o",outdir+filename,filename])
else:
    print("Specify valid input files.")

Я был бы очень признателен за любой вклад и помощь, которую я мог бы получить по этому вопросу.

Заранее спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...