【问题标题】:'Wildcards' object has no attribute 'output'“通配符”对象没有属性“输出”
【发布时间】:2020-10-12 13:15:52
【问题描述】:

我得到一个相当简单的规则的错误。我必须为另一个程序编写一个任务文件,需要一个 tsv 文件。我从配置文件中读取了一定数量的参数,并使用 shell 命令将它们写入文件。

代码:

rule create_tasks:
    output:
        temp("tasks_{sample}.tsv")
    params:
        ID="{sample}",
        file=lambda wc: samples["path"][wc.sample] ,
        bigwig=lambda wc: samples["bigwig"][wc.sample] ,
        ambig=lambda wc: samples["ambig"][wc.sample] 
    shell:
        
        'echo -e "{params.ID}\t{params.file}" > {output}' 

当我执行工作流时,我收到以下错误:

Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cluster nodes: 1
Job counts:
        count   jobs
        1       create_tasks
        1

[Mon Oct 12 14:48:15 2020]
rule create_tasks:
    output: tasks_sampleA.tsv
    jobid: 0
    wildcards: sample=sampleA

echo -e "sampleA    /Path/To/sampleA.bed               " > tasks_sampleA.tsv
WorkflowError in line 23 of /path/to/workflow.snakefile:
'Wildcards' object has no attribute 'output'
  File "/path/to/miniconda/envs/snakemake_submit/lib/python3.8/site-packages/snakemake/executors/__init__.py", line 111, in run_jobs
  File "/path/to/miniconda/envs/snakemake_submit/lib/python3.8/site-packages/snakemake/executors/__init__.py", line 1233, in run 

我应该提一下,其中两个变量是空的,我希望 echo 命令中有制表符/空格。

有人解释一下,为什么snakemake 试图在通配符中查找输出?我特别困惑,因为它正在打印正确的命令。

【问题讨论】:

  • 这很奇怪!你用的是什么蛇形版本?第 (23) 行是否符合相同的规则?你能举一个我们也可以自己运行的小例子吗?
  • 是的,该行对应相同的规则。我不知道出了什么问题,但显然这是一个不相关的错误(它突然又工作了,可能是一些服务器问题)。

标签: shell output wildcard rules snakemake


【解决方案1】:

我也遇到过同样的问题。 问题可能在于您如何从命令行调用 Snakemake。 例如,这是我的 Snakefile 规则:

rule sort:
    input:
        "{file}.bam",
    output:
        "{file}.sorted.bam",
        "{file}.sorted.bai",
    shell:
        "sambamba sort {input}"

我什至没有明确的paramswildcards 在那里。 但是当我在我的 Slurm HPC 上运行它时,我得到了同样的错误:

snakemake -j 10 -c "sbatch {cluster.params}" -u cluster.yaml

Wildcards(注意大写“W”)和params 对象不在规则中。 它们来自规则的集群执行,在尝试解析cluster.yaml文件时抛出错误。

我的cluster.yaml 文件中没有sort 规则的集群参数规范,因此引发了错误。 我通过添加解决了这个问题

sort:
    params: "..."

到我的cluster.yaml 文件。 在您的情况下,在 create_tasks: ... 列表下添加集群提交选项。 您还可以添加__default__: ... 列表作为任何作业的默认提交参数,默认情况下,除非它匹配其他规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2019-04-30
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多