问题描述
我想创建一个Snakemake规则,其中包含:输入,日志,shell节。没有输出,我只想作为命令的结果来捕获日志。
解决方法
只需告诉Snakemake日志文件就是输出:
rule myrule:
input: "myfile.txt"
output: "logfile.log"
shell: "mycommand {input} > {output}"
,
您可以跳过output:
,而仅在规则中使用log:
。这些日志文件可用作目标或其他规则的输入。 As per the doc:
日志文件可以用作其他规则的输入,就像其他任何输出文件一样。但是,与输出文件不同,不会在出错时删除日志文件。显然,这是发现错误原因的必要条件,而错误原因可能在日志文件中变得可见。
所以代码如下:
rule some_rule:
input: "a.txt"
log: "a.log"
shell: "mycommand {input} > {log}"
这里的优点是,与output
文件不同,日志文件将在作业失败的情况下保留。但是,这种优势也是一个劣势,因为如果您重新运行管道,snakemake将不会重新运行失败的作业,因为规则的输出文件(即此处的日志文件)已经存在。因此,除非工作失败时日志保存很重要,否则使用Maarten-vd-Sande建议的解决方案可能会更好。