簡體   English   中英

如何訪問 Snakefile 中的 Snakemake 參數?

[英]How to access Snakemake parameters inside Snakefile?

我試圖弄清楚如何訪問我的 Snakefile 中的 Snakemake 參數,例如設置目標規則(由用戶指定或第一個定義的規則)。 我能夠使用dir()在環境中找到一些設置,但不是目標規則。 這甚至可以訪問嗎?

編輯:我想在運行開始時打印最重要參數的概述,包括用戶 ID、配置文件的路徑以及目標規則(因為我們的工作流有多個端點/目標規則,我找到了將其記錄在某處很有用)。

經過一番挖掘,我發現了包含一些有用信息的workflow對象,但是first_rule設置為None 我本來希望將該屬性設置為目標規則,但也許我還沒有理解它的用途,和/或不應從workflow對象中提取任何信息。

我知道我可以使用--report功能來獲取大量信息 - 我們確實使用它 - 但希望獨立於它。

謝謝!

從更新的問題來看, workflow似乎很有用。 具體來說,一種選擇是迭代工作流中的所有規則(請參閱相關答案),在迭代期間提取感興趣的信息。 專門針對目標規則信息,在以下 Snakefile 上運行snakemake -j 1似乎會輸出所需的信息:

rule all:
    input:
        "a.txt",
        "b.txt",


rule a:
    output:
        "a.txt",
    shell:
        """
        echo "a" > {output}
        """


rule b:
    output:
        "b.txt",
    default_target: True,
    shell:
        """
        echo "b" > {output}
        """

print(workflow.default_target)
# will print b

printing方面的一個注意事項,如果您正在執行集群提交或者您的規則具有對傳入數據敏感的 shell 命令,則將信息記錄到文件中而不是打印到標准輸出可能會更好。 至少我有一些不明顯的錯誤的經驗,這些錯誤最終可以追溯到我在 Snakefile 中打印。

更新:這是針對邊緣情況的 hack,但如果有人對動態修改default_target感興趣,則可以執行以下操作(這只是偽代碼,未經測試):

# assume that config contains the name of the desired target rule
default_target = config["default_target"]

for n, r in enumerate(workflow.rules):
    if r.name == default_target:
        r.default_target = True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM