#snakemake
#snakemake
Вопрос:
Я пытался создать переносимые оболочки snakemake, которые выполняют предварительно созданные сценарии в «wrapper.py » сценарий. Однако до сих пор все примеры, которые я нашел, вызывали shell
snakemake.shell
функции для запуска из командной строки. Поэтому я подумал, что эквивалентом сценариев будет использование script
from snakemake.script
для выполнения сценариев. Но когда я использую это в правиле, оно выдает ошибку, подобную этой:
Traceback (most recent call last):
File "/home/robertlink/stack_overflow_dummy_example/.snakemake/scripts/tmpqfzkhuv_.wrapper.py", line 7, in <module>
script("scripts/foo.py")
TypeError: script() missing 19 required positional arguments: 'basedir', 'input', 'output', 'params', 'wildcards', 'threads', 'resources', 'log', 'config', 'rulename', 'conda_env', 'container_img', 'singularity_args', 'env_modules', 'bench_record', 'jobid', 'bench_iteration', 'cleanup_scripts', and 'shadow_dir'
Есть ли способ легко получить информацию, необходимую для использования script
? Или я ошибаюсь, что я должен даже использовать script
таким образом? Вот фиктивный пример для репликации сообщения:
Структура каталогов:
.
├── Snakefile
└── wrapper
└── path
├── scripts
│ ├── bar.py
│ └── foo.py
└── wrapper.py
Snakefile:
rule foobar:
output:
"foobar.txt"
wrapper:
"file:wrapper/path"
wrapper.py
from snakemake.script import script
script("scripts/foo.py")
script("scripts/bar.py")
foo.py
with open("foo_intermediate.txt", 'w') as handle:
handle.write("foo")
bar.py
with open("foo_intermediate.txt", 'w') as handle:
foo = handle.read()
foo = 'bar'
with open(snakemake.output) as handle:
handle.write(foo)
команда выполнить:
$ snakemake --cores 3
Любое понимание этого было бы замечательно. Спасибо!
Ответ №1:
Вам не нужно писать оболочку для вызова ваших скриптов — скрипты могут быть оболочкой. Может быть, взгляните на эту оболочку, основанную на Rscript, чтобы понять идею:
https://snakemake-wrappers.readthedocs.io/en/latest/wrappers/tximport.html
Комментарии:
1. Вы абсолютно правы. Для других, смотрящих на это, я просто свернул свои сценарии в wrapper.py сценарий и запустил его соответствующим образом. Спасибо, jafors!