Это ожидаемый результат. В этом случае разверните просто оболочку для
[str(sample) for sample in SAMPLES]
, которая при вводе в оболочку или скрипт превращается в элементы, объединенные с пробелом между A B
.
Вместо этого вы хотите Общее правило, которое будет работать для любого примера (вам также нужен выходной файл):
rule test:
output: "{sample}.out"
shell:
"test.py {wildcards.sample}" # no need for params, assume this writes output {sample}.out
Здесь test.py - исполняемый файл. Поэтому, когда вы запрашиваете A.out, запускается test.py A
, для B.out вы получаете test.py B
.
Далее вы должны запрашивать желаемые результаты. Обычно это первое правило в файле змеи, и оно называется all:
rule all:
input: expand('{sample}.out', sample=SAMPLES)
Опять, расширение даст вам список сэмплов, и в вашем случае, все правило становится:
rule all:
input: 'A.out', 'B.out'
С указанными выходными файлами snakemake определяет, что тест правил нужно запускать дважды, один раз с A и один раз с B.
Запомните, напишите свои правила как обобщение для любого one образец. Вам может понадобиться только одно расширение в правиле all, чтобы специализировать ваши правила для каждого образца. Snakemake отвечает за определение того, что нужно запустить, и если вы дадите ему дополнительные ядра, он может сделать это одновременно для отдельных заданий.