You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建Nextflow DSL2 BLAST流程遇变量错误,需添加workflow语句

问题解决:Nextflow DSL2 BLAST流程参数失效及变量报错

错误原因

  1. DSL2 要求必须通过 workflow {} 块显式启动进程,原代码缺少该块导致进程未执行,同时引发参数作用域解析异常。
  2. 直接在进程脚本中引用 $params.query 存在作用域问题,触发「No such variable: query」报错。

修改后的完整代码

#!/usr/bin/env nextflow

nextflow.enable.dsl=2

// 参数配置移至开头,避免作用域问题
params {
    query = "$PWD/input.fasta"
    dbDir = "$PWD/DB/"
    dbName = "blastDB"
    threads = 2
    outdir = "out_dir"
}

println "\nI want to BLAST $params.query to $params.dbDir/$params.dbName using $params.threads CPUs and output it to $params.outdir\n"

process runBlast {
    // 将结果发布到指定输出目录
    publishDir "$params.outdir", mode: 'copy'

    input:
    // 通过输入通道传递查询文件,规范处理文件路径
    path query_file from params.query

    script:
    """
    blastn -num_threads ${params.threads} -db ${params.dbDir}/${params.dbName} -query ${query_file} -outfmt 6 -out input.blastout
    """
}

// 新增workflow块,启动BLAST进程
workflow {
    runBlast()
}

关键修改说明

  • 添加 workflow {} 块:DSL2 中进程不会自动运行,必须在该块内调用进程(如 runBlast())触发执行。
  • 调整参数引用方式:通过 input 通道将 params.query 作为文件传入进程,避免直接引用 params 的作用域问题,同时符合 Nextflow 数据流范式。
  • 新增 publishDir:将进程生成的结果文件自动复制到指定的 outdir,实现结果持久化。
  • 调整 params 位置:移至脚本开头,符合 Nextflow 常规写法,避免参数加载顺序问题。

验证命令行参数

使用以下命令传入自定义参数,参数将正确覆盖默认值:

nextflow run main.nf --query /path/to/custom/query.fasta --threads 4 --outdir custom_out

内容的提问来源于stack exchange,提问作者Eesha Bhatkhande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:31:21