问题
有时候存在需要 process 接收可选的输入文件的场景。
解决方案
可以使用特殊的文件名来标记这类输入参数,类似于一个 placeholder。
可以在assets
中创建一个空文件:
touch assets/NO_FILE
示例代码
params.inputs = "$projectDir/data/prots/*{1,2,3}.fa"
params.filter = "$projectDir/assets/NO_FILE"
process foo {
debug true
input:
path seq
path opt
script:
def filter = opt.name != 'NO_FILE' ? "--filter $opt" : ''
"""
echo your_command --input $seq $filter
"""
}
workflow {
prots_ch = Channel.fromPath(params.inputs, checkIfExists:true)
opt_file = file(params.filter, checkIfExists:true)
foo(prots_ch, opt_file)
}
这样就可以在运行时指定参数 filter
控制是否真正的使用输入文件。