2017-03-16 3 views
2

私はthe documentation for the log section of a snakemake ruleを理解しているので、ログファイルに物事を「手動で」送信する必要があります。 outputセクションで定義されているファイルを使用して同じ結果を得ることができたようです。snakemakeルールのログセクションで定義されたファイルは、出力セクションで定義されたものとは大きく異なりますか?

これら2つのアプローチの重要な違いは何ですか?

logセクションの本当の有用性は何ですか?ログのための最高のpraticeがSnakemakeである私にとって

+0

私はわからないんだけど、私は、出力ファイルはルールチェーンにSnakemakeで使用されているので、それは、「クリーナー」に見えると言うと、実行されるべきルール決定するであろう、あるどのファイルに依存present/absent ... – rioualen

+0

私が気づいたのは、すべての出力に同じワイルドカードが含まれているように見えるということです。これらのワイルドカードのないログファイルが必要なのでしょうか?そうでない可能性があります。これは、同じルールの他のインスタンスからのログを上書きすることを意味するためです。 – bli

答えて

3

はそのようなものです:

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 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}' 

これはexample1ルールと同じ結果が得られます。しかし、output sectionの目的は、他のルールでdependenciesを作成するか、必要な結果ファイルを提供することです。ほとんどの場合、ルールやパラメータやファイルをチェックしない限り、ログはこれらのファイルではありません。

出力をログオンすることには大きな欠点があります。 Snakemakeのルールが失敗すると、Snakemakeは、失敗した場合に破損する可能性のあるすべての出力を削除します。あなたのログも削除され、プログラムのどのステップで失敗したのか、それの理由を見ることができないかもしれません。

ヒューゴ

+1

出力ファイルの削除は本当に重要なポイントです。ありがとう。 – bli

+0

これは 'shell:'ではなく 'script:'を使っていたのですか? – anilbey

関連する問題