如何串联两个Nextflow脚本:前者输出作为后者输入(求DSL-2示例)
整合Nextflow脚本(DSL-2格式)
需求背景
已有两个可独立运行的Nextflow脚本:parse_annotation.nf会生成.csv文件,该文件需作为sample_parse.nf的输入。需将两者整合为一个DSL-2格式的脚本,按顺序执行并自动传递输出结果。
整合后的完整脚本
#!/usr/bin/env nextflow // 定义全局参数 params.annotation_file = "sample_annot.txt" // 输入的注释文件路径 params.python_script_dir = "/home/krushna/temp" // Python脚本存放目录 // 检查依赖文件存在性 println "=== 依赖文件检查 ===" println "parse_annotation.py 存在: ${file("${params.python_script_dir}/parse_annotation.py").exists()}" println "sample_parse.py 存在: ${file("${params.python_script_dir}/sample_parse.py").exists()}" println "输入注释文件存在: ${file(params.annotation_file).exists()}" println "当前工作目录: ${System.getenv('PWD')}" // 第一个流程:生成CSV文件 process parse_annotation { input: path annotation_file output: path "sample.csv", emit: csv_output script: """ python3 ${params.python_script_dir}/parse_annotation.py -f ${annotation_file} > sample_output.txt 2>&1 """ } // 第二个流程:使用生成的CSV和原注释文件生成最终结果 process parse_sample { input: tuple path(csv_file), path(annot_file) output: path "parsed_output_dir", emit: final_output script: """ mkdir -p parsed_output_dir python3 ${params.python_script_dir}/sample_parse.py ${csv_file} ${annot_file} mv *.samplesheet.csv *.info.txt parsed_output_dir/ """ } // 主工作流:按顺序执行流程并传递数据 workflow { // 初始化输入通道 annot_input = Channel.fromPath(params.annotation_file) // 执行第一个流程,生成CSV parse_annotation(annot_input) // 将生成的CSV与原注释文件组合,作为第二个流程的输入 combined_input = parse_annotation.out.csv_output.combine(annot_input) // 执行第二个流程 parse_sample(combined_input) // 可选:打印最终输出路径 parse_sample.out.final_output.view("最终输出目录:") }
关键修改说明
- 参数统一管理:将Python脚本路径、输入注释文件等定义为全局参数,便于后续维护和修改。
- 流程数据传递:通过
parse_annotation.out.csv_output直接获取第一个流程的输出CSV,再与原注释文件组合后传入第二个流程,实现流程间的自动衔接。 - DSL-2特性应用:使用
emit关键字命名输出通道,让流程间的数据传递逻辑更清晰;工作流中按顺序调用流程,整体逻辑直观易懂。 - 鲁棒性优化:添加
mkdir -p确保输出目录创建成功,避免因目录不存在导致的报错。
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

