不带输出指令的snakemake规则

问题描述 投票:0回答:1

假设我有一个像这样的snakemake规则:

rule test:
  input: myfile="myfile.txt",
  params: test_out = "test",
  shell:  "tool {input.myfile} -p ~/desktop/{params.test_out}

该工具不支持 -o 选项来指定输出,但提供 -p 来指定文件的前缀。

基本上,该工具接受一些输入,处理文件并生成多个输出文件。但是,如果我的脚本顶部有一条规则,则它不会执行该规则,因为它不包含输出指令。我如何仍然生成此规则的输出以及规则 all 中指定的其他规则的输出?

感谢您的帮助!

python snakemake
1个回答
0
投票

你仍然有一个输出,如果你知道它,你应该告诉snakemake。举个例子,假设您知道

output.txt
将成为输出:

rule test:
  input: myfile="myfile.txt",
  output: "test/output.txt"
  params: test_out = lambda wildcards, output: Path(output[0].parent),
  shell:  "tool {input.myfile} -p {params.test_out}

您知道输出文件,只需将其转换为预期的参数即可。这里需要考虑的一些因素是,如果该工具始终输出到

output.txt
,无论输入如何,您都必须为每个样本拥有唯一的子目录,以防止损坏。

该工具也可能会生成不确定数量的文件,例如

output_{1..n}.txt
但是你可以指定目录。那你就有了

rule test:
  input: myfile="myfile.txt",
  output: directory("test")
  shell:  "mkdir -p {output} ; tool {input.myfile} -p {output}

使用

directory
输出,snakemake 不再自动创建父目录,因此您必须手动执行此操作。任何使用工具输出的规则也可能需要规则为
checkpoint
,以便在执行之前可以查询输出。

© www.soinside.com 2019 - 2024. All rights reserved.