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

Nextflow代码报错:无有效错误信息,提示Unexpected input: '{'

问题

Nextflow代码运行时抛出错误:cause: Unexpected input: '{'",无有效错误详情。代码及场景如下:

workflow fqcheck {
  take:
  path reads
  
  Channel.fromPath(reads)
    .map {file -> 
      def idx = ${file}.getName().replaceAll("\\D","")
      "fqcheck33 -r ${file} -c  ${file%.fq.gz}.${idx}.fqcheck"
    }

  publishDir params.outdir

}
workflow {
  fqcheck(ch_fq)
}

ch_fq为成对的FastQ文件,例如sample.clean_1.fq.gz与sample.clean_2.fq.gz。

问题分析与修复

1. 语法错误根源

报错是因为Groovy闭包内错误使用了${file}格式引用变量。在Groovy代码块(闭包)中,直接使用变量名即可,不需要${}包裹——${}仅用于字符串插值场景。

2. 代码修复及功能补全

原代码仅生成了命令字符串,但未定义process执行命令,即使修复语法也不会实际运行任务。以下是完整修复后的代码:

workflow fqcheck {
  take:
  path reads
  
  // 修复变量引用语法,生成命令通道
  Channel.fromPath(reads)
    .map { file -> 
      def idx = file.getName().replaceAll("\\D","")
      "fqcheck33 -r ${file} -c ${file%.fq.gz}.${idx}.fqcheck"
    }
    .into { cmd_channel }

  // 定义process执行命令
  process run_fqcheck {
    input:
    val cmd from cmd_channel

    output:
    path "*.fqcheck" into fqcheck_results

    // 配置结果发布目录
    publishDir params.outdir, mode: 'copy'

    script:
    cmd
  }
}

workflow {
  fqcheck(ch_fq)
}

关键修改点

  • 移除def idx = ${file}.getName()中的${},改为def idx = file.getName()
  • 添加process run_fqcheck,用于接收命令通道并执行fqcheck33工具
  • 给publishDir指定mode: 'copy',确保结果文件被复制到输出目录(默认是链接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:03:32