0

我在 nextflow 脚本中运行两个进程(如下所示)。第一个过程输出一些绘图,第二个过程必须包含这些绘图以生成 pdf 文件。这两个进程都在 docker 容器 (docimage:1.0.0) 中运行。当我运行这个 nextflow 脚本时,第一个进程运行良好,但第二个进程没有完成,因为乳胶文件找不到绘图,因为包含绘图的输出目录不是在 docker 容器内创建的。然而,包含绘图的输出目录是在运行 nextflow 脚本的本地目录中生成的。有人可以建议如何从 docker 容器内的第一个进程生成输出目录,以便乳胶文件可以包含 docker 容器内的图吗?谢谢 !

process run_pr {

echo true
container 'docimage:1.0.0'

publishDir "${params.outDir}", mode: 'copy'

output:
file '*' into output_ch

script:
"""
Rscript /home/project/scripts/run.R -s "$params.inputDir" -i "$params.inputFile"
"""
}



process latexGen {

echo true
container 'docimage:1.0.0'

input:
file '*' from output_ch

output:
publishDir "${params.outDir}", mode: 'copy'
    
script:
"""
pdflatex -output-directory=/home/project/$params.outDir  /home/project/scripts/doc.tex
"""
}
4

1 回答 1

0

最好避免在管道进程中使用引用文件的绝对路径。您需要确保输入文件正确本地化。这可能会帮助您入门:

inputFile = file(params.inputFile)
inputDir = file(params.inputDir)

tex = file('/home/project/scripts/doc.tex')

process run_pr {

    container 'docimage:1.0.0'

    publishDir "${params.outDir}/run_pr", mode: 'copy'

    input:
    file inputFile
    file inputDir

    output:
    file '*' into output_ch // avoid using loose wildcards when specifying outputs

    script:
    """
    run.R -s "${inputDir}" -i "${inputFile}"
    """
}

process latexGen {

    container 'docimage:1.0.0'

    publishDir "${params.outDir}/latexGen", mode: 'copy'

    input:
    file 'pdf/*' from output_ch
    file tex

    output:
    file "pdf/doc.pdf"
    
    script:
    """
    pdflatex -output-directory pdf doc.tex
    """
}

我对乳胶的经验是有限的。我并不完全清楚该-output-directory选项是如何工作的:

-output-directory directory
    Write output files in directory instead of the current directory.
    Look up input files in directory first, the along the normal search path.

如果您的输出目录用于输出 PDF,您可以忽略该选项。如果它被用来“查找”输入文件,那么您显然需要保留它。

也不完全清楚您的流程“run_pr”做什么以及它的输出是什么。它是只写一个文件还是产生多个文件?如果您可以通过一些示例输入进行澄清,那就太好了。

于 2021-01-15T00:21:36.347 回答