Nextflow调用template模板脚本时如何正确传递参数
Nextflow 向template模板脚本传递参数的正确方法
报错原因
template 方法仅接受模板文件路径作为唯一输入参数,作用是定位、渲染对应路径的模板文件。如果把命令行参数写在template传入的路径字符串内部,Nextflow会把整段字符串识别为模板文件名,自然找不到对应文件,抛出"can't find template file"错误。
正确传参写法
参数不要写在template的入参里,要作为命令的一部分,拼接在template调用的外部即可,和普通命令行传参逻辑完全一致。
简单参数场景
参数少的时候可以直接单行拼接:
process callPython { input: path(someinput) output: path(someoutput) shell: template('myscript.py') << " -someargument" }
多参数/带变量场景
参数较多、需要传入Nextflow内定义的变量(输入值、流程参数、局部变量等)时,使用多行shell块写法可读性更强:
process callPython { input: path(someinput) val(threads) // 从通道传入的线程数参数 output: path(someoutput) shell: ''' !{template 'myscript.py'} \ --input !{someinput} \ --threads !{threads} \ --output !{someoutput} \ --flag ''' }
注意事项
- 模板脚本的第一行必须写正确的shebang声明,比如Python脚本开头写
#!/usr/bin/env python3,Nextflow渲染模板后会自动给脚本赋予可执行权限,拼接的参数会以标准命令行参数的形式传入脚本,和本地直接执行脚本的传参效果完全一致。 - shell块中引用Nextflow变量使用
!{变量名}占位符,如果是script块则使用${变量名}占位符,注意区分块类型避免变量解析错误。
内容的提问来源于stack exchange,提问作者jh_
相关产品推荐
相关产品推荐

