0

Snakefile 内からルールごとに作成されたログ ファイルをプログラムで一覧表示する方法はありますか? DAG を利用する必要がありますか? はいの場合、その方法は?

背景: 作成されたすべてのログ ファイルをまとめて削除したいと考えています (クラスター ログのみが別のフォルダーにあり、一部の出力ファイルは対応してログ ファイルと呼ばれています)。このために、プログラムの実行によって作成された可能性があり、偶然にもログ グロブと一致するログ ファイルを除外します。

shellcmd_tracking ファイルの解析がより簡単になるなど、代替手段はありますか?

ありがとう、アンドレアス

4

2 に答える 2

3

今後のリリース 3.9.0 では、 を呼び出すときに、すべての出力ファイルに対応するログ ファイルを表示できますsnakemake --summary

于 2016-11-15T09:24:04.663 に答える
1

次のことを試みることができます

onsuccess:
    for rulename in dir(rules):
        the_rule = getattr(rules, rulename)
        if hasattr(the_rule, "log"):
            print(rulename, ":\t", getattr(the_rule, "log"))

同様にonerror.

ルールのログ ファイルにワイルドカードが含まれている場合は、これを展開して実際のログ ファイル名を生成できる場合があります。

私はこれをテストしました:

LETTERS = ["A", "B"]
NUMS = ["1", "2"]


rule all:
    input:
        expand("combined_{letter}.txt", letter=LETTERS)

rule generate_text:
    output:
    "text_{letter}_{num}.txt"
    log:
        "text_{letter}_{num}.log"
    shell:
        """
        echo "test" > {output} 2> {log}
        """

rule combine_text:
    input:
        expand("text_{{letter}}_{num}.txt", num=NUMS)
    output:
        "combined_{letter}.txt"
    shell:
        """
        cat {input} > {output}
        """

onsuccess:
    for rulename in dir(rules):
        the_rule = getattr(rules, rulename)
        if hasattr(the_rule, "log"):
            print(rulename, ":\t", expand(getattr(the_rule, "log"), letter=LETTERS, num=NUMS))

そして、最後に次の出力を取得します。

all :    []
combine_text :   []
generate_text :  ['text_A_1.log', 'text_B_1.log', 'text_A_2.log', 'text_B_2.log']

問題は、これにより、特定の実行で実際に生成されたログ ファイルではなく、snakefile によって生成された可能性のあるすべてのログ ファイルが表示されることです (たとえば、一部のルールを今回実行する必要がない場合)。

編集:ログファイル名を展開する別の方法

(onsuccessまたはonerror) 実際に生成されたログ ファイルに適応するために、別の方法で行うことができます。

import glob
onsuccess:
    for rulename in dir(rules):
        the_rule = getattr(rules, rulename)
        if hasattr(the_rule, "log"):
            print(rulename, ":\t", *[glob.glob(pattern) for pattern in expand(getattr(the_rule, "log"), letter=['*'], num=['*'])])

この変更により、ほぼ同じファイル名のリストが得られます。唯一の違いは、それらが表示される順序です。

于 2016-11-15T16:58:40.900 に答える