Per*_*ika 2 process 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
"""
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要这两个文件作为另一个进程的输入,但我不知道该怎么做。
我尝试过调用这个过程
NEXT_PROCESS(params.hitsort, params.contigs)
Run Code Online (Sandbox Code Playgroud)
同时将输入指定为:
process NEXT_PROCESS {
input:
path hitsort
path contigs
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为只使用基本名称而不是完整路径。基本上我想要的是等待 RUN_RE 完成,然后使用它输出的两个文件进行下一个进程。
最好避免访问publishDir中的文件,因为:
文件以异步方式复制到指定目录中,因此在流程执行结束时它们可能无法立即在发布的目录中可用。因此,进程发布的文件不得被其他下游进程访问。
因此,建议确保您的进程仅访问工作目录(即./work)中的文件。这意味着:最好避免输入和输出声明中使用绝对路径之类的内容。这也将有助于确保您的工作流程是可移植的。
nextflow.enable.dsl=2
params.interleaved_fq = './path/to/interleaved.fq'
params.publish_dir = './results'
Run Code Online (Sandbox Code Playgroud)
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
"""
}
Run Code Online (Sandbox Code Playgroud)
process NEXT_PROCESS {
input:
path hitsort
path contigs
"""
ls -l
"""
}
Run Code Online (Sandbox Code Playgroud)
workflow {
interleaved_fq = file( params.interleaved_fq )
NEXT_PROCESS( RUN_RE( interleaved_fq ) )
}
Run Code Online (Sandbox Code Playgroud)
上述工作流程块实际上与以下相同:
workflow {
interleaved_fq = file( params.interleaved_fq )
RUN_RE( interleaved_fq )
NEXT_PROCESS( RUN_RE.out.hitsort_cls, RUN_RE.out.contigs_fasta )
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5461 次 |
| 最近记录: |