“通配符”对象没有属性“输出”

问题描述

我因为一个简单的规则而出错。我必须为另一个程序编写一个任务文件,并且需要一个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试图在通配符中查找输出?我特别感到困惑,因为它正在打印正确的命令。

解决方法

我遇到了同样的问题。 问题可能在于您如何从命令行调用 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__: ... 列表作为任何作业的默认提交参数,除非它与其他规则匹配。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...