据我了解the documentation for the log
section of a snakemake rule,必须手动"将内容发送到日志文件。在我看来,使用output
部分中定义的文件可以获得相同的结果。
这两种可能的方法有哪些重要区别?
log
部分的实际用途是什么?
答案 0 :(得分:4)
对我而言,最好的日志实践是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}'
我认为log section
非常有用。大多数程序或工具会在standard out
和standard 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}'
这将产生与example1
规则相同的结果。但output section
的目的是使dependencies
与其他规则一起使用,或者只提供您需要的结果文件。在大多数情况下,日志不是这些文件,除非在规则中检查某些参数或文件。
将日志放在输出上有一个很大的缺点。当Snakemake中的规则失败时,Snakemake会删除可能因失败而损坏的所有输出。因此,您的日志也将被删除,您可能无法看到该程序的哪一步失败或其原因。
雨果