はそのようなものです:
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は、失敗した場合に破損する可能性のあるすべての出力を削除します。あなたのログも削除され、プログラムのどのステップで失敗したのか、それの理由を見ることができないかもしれません。。
ヒューゴ
私はわからないんだけど、私は、出力ファイルはルールチェーンにSnakemakeで使用されているので、それは、「クリーナー」に見えると言うと、実行されるべきルール決定するであろう、あるどのファイルに依存present/absent ... – rioualen
私が気づいたのは、すべての出力に同じワイルドカードが含まれているように見えるということです。これらのワイルドカードのないログファイルが必要なのでしょうか?そうでない可能性があります。これは、同じルールの他のインスタンスからのログを上書きすることを意味するためです。 – bli