Укажите целевые правила через командную строку из исполняемого файла python для рабочих процессов Snakemake

#python #bioinformatics #snakemake

#python #биоинформатика #snakemake

Вопрос:

Я выполняю рабочий процесс Snakemake с помощью приложения python командной строки, которое работает более или менее таким образом:

 ./run.py workflowfile -argument1 -argument2...
 

В файле рабочего процесса указано целевое правило, которое передается в аргумент «targets» API Snakemake, например:

 with open(workflowfile, 'rt') as fp:
    workflow_info = json.load(fp)

target = workflow_info['workflow_target']
status = snakemake.snakemake(....targets=[target]....)
 

Где «цели» должны быть списком.
Теперь я пытаюсь избавиться от «workflowfile» и хочу указать с помощью другого аргумента имя целевого правила, чтобы получить:

 ./run.py -w "targetrulename" -a1 -a2...
 

В интерфейсе командной строки Snakemake это делается простым способом с помощью «target», вызывая:

 snakemake  targetrulename
 

где targetrulename — это просто имя правила, на которое вы хотите быть нацелены. Итак, я попытался реализовать новый аргумент командной строки с помощью argparse следующим образом:

 parser.add_argument('-w', '--workflow', action="append", help='specify the workflow from the following: ')
 

и затем

 targets=args.workflow
 

но так или иначе я получаю разные ошибки. Некоторые примеры:

 -TypeError: unsupported operand type(s) for  : 'NoneType' and 'int'
-TypeError: unhashable type: 'list'
-No rule to produce c  (If I type "complete" as target rule name)
 

Извините за то, что я новичок, я только начал работать в области биоинформатики (я биотехнолог), и это мой первый вопрос о переполнении стека. Надеюсь, я все сделал правильно.
Спасибо за любые советы или рекомендации

Редактировать:

минимальный пример для скрипта python:

 import argparse
import snakemake

def main(args)
    snakefile=snakefile_path
    snakemake.snakemake(snakefile, configfiles=[args.configfile] …)

if __name__ == ‘__main__’
    parser=argparse.ArgumentParser(description=””, usage=””)
    parser.add_argument(‘-c’, ‘--configfile’, action=’store’)
    [...]
    args = parser.parse_argse()
 

редактировать: решаемая

Комментарии:

1. Можете ли вы привести минимальный пример? Небольшой скрипт на python с argparse, snakefile и как вы его вызываете?

2. Конечно, я отредактировал сообщение. Спасибо