![](/img/trans.png)
[英]How to access variables defined in the snakefile in a snakemake wrapper?
[英]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.