在snakemake规则的日志部分中定义的文件与在输出部分中定义的文件有很大不同吗?

bli*_*bli 3 logging snakemake

据我了解蛇制作规则部分的文档log,必须“手动”将内容发送到日志文件。在我看来,使用本output节中定义的文件可以达到相同的结果。

这两种可能的方法之间的重要区别是什么?

该部分的真正用处是什么log

Per*_*ugo 5

对我来说,日志的最佳实践是 Snakemake 是这样的:

rule example1:
  input:
    file = <input>

  log: 
    out = '_stdout.log',
    err = '_stderr.err'

  output:
    <output>

  shell: 
    'Script/Tool {input.file} 2> {log.err} 1> {log.out}'
Run Code Online (Sandbox Code Playgroud)

log section我认为这非常有用。大多数程序或工具都会生成一些日志standard outstandard error。这对于用户了解工具或程序在哪一步失败非常有用。

当然,您可以在输出部分执行此操作,如以下代码:

rule example2:
  input:
    file = <input>

  output:
    file = <output>
    out = '_stdout.log',
    err = '_stderr.err'

  shell: 
    'Script/Tool {input.file} 2> {output.err} 1> {output.out}'
Run Code Online (Sandbox Code Playgroud)

这将产生与规则相同的结果example1。但目的output section是与其他规则一起制作dependencies或只是提供您需要的结果文件。大多数情况下,日志不是这些文件,除非在规则中检查某些参数或文件。

将日志放在输出上有一个很大的缺点。当 Snakemake 中的规则失败时,Snakemake 会删除所有可能因失败而损坏的输出。所以你的日志也会被删除,你可能无法看到程序在哪一步失败或者失败的原因

雨果