据我了解蛇规则部分的文档log
,必须“手动”将内容发送到日志文件。在我看来,使用该output
部分中定义的文件可以实现相同的结果。
这两种可能的方法之间的重要区别是什么?
该部分的真正用处是log
什么?
对我来说,日志的最佳实践是 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 会删除所有可能因失败而损坏的输出。所以你的日志也会被删除,你可能看不到它在程序的哪一步失败或失败的原因。
雨果