如何解决Nextflow:如何将输出多个文件从 publishdir 传递到下一个进程?
我有一个进程生成两个我感兴趣的文件,hitsort.cls 和 contigs.fasta。 我使用publishdir输出这些:
process RUN_RE {
publishDir "$baseDir/RE_output",mode: 'copy'
input:
file 'interleaved.fq'
output:
file "${params.RE_run}/seqclust/clustering/hitsort.cls"
file "${params.RE_run}/contigs.fasta"
script:
"""
some_code
"""
}
现在,我需要这两个文件作为另一个进程的输入,但我不知道该怎么做。
我试过用
调用这个过程NEXT_PROCESS(params.hitsort,params.contigs)
同时将输入指定为:
process NEXT_PROCESS {
input:
path hitsort
path contigs
但它不起作用,因为只使用基本名称而不是完整路径。基本上我想要的是等待RUN_RE完成,然后将它输出的两个文件用于下一个进程。
解决方法
最好避免访问 publishDir 中的文件,因为:
文件以异步方式复制到指定目录中,因此它们可能不会在流程执行结束时立即在发布目录中可用。因此,一个进程发布的文件必须不能被其他下游进程访问。
因此,建议确保您的进程仅访问工作目录中的文件(即 ./work
)。这意味着:最好避免在输入和输出声明中使用绝对路径之类的东西。这也有助于确保您的工作流程具有可移植性。
nextflow.enable.dsl=2
params.interleaved_fq = './path/to/interleaved.fq'
params.publish_dir = './results'
process RUN_RE {
publishDir "${params.publish_dir}/RE_output",mode: 'copy'
input:
path interleaved
output:
path "./seqclust/clustering/hitsort.cls",emit: hitsort_cls
path "./contigs.fasta",emit: contigs_fasta
"""
# do something with ${interleaved}...
ls -l "${interleaved}"
# create some outputs...
mkdir -p ./seqclust/clustering
touch ./seqclust/clustering/hitsort.cls
touch ./contigs.fasta
"""
}
process NEXT_PROCESS {
input:
path hitsort
path contigs
"""
ls -l
"""
}
workflow {
interleaved_fq = file( params.interleaved_fq )
NEXT_PROCESS( RUN_RE( interleaved_fq ) )
}
上述工作流块实际上与以下内容相同:
workflow {
interleaved_fq = file( params.interleaved_fq )
RUN_RE( interleaved_fq )
NEXT_PROCESS( RUN_RE.out.hitsort_cls,RUN_RE.out.contigs_fasta )
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。