Snakemake:如何创建不带显式输出文件,仅具有指定输入和日志文件的规则?

问题描述

我想创建一个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建议的解决方案可能会更好。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...