Nextflow中PSORTb流程缺失输出文件错误排查求助
问题:Nextflow执行PSORTb流程时提示缺失输出文件
我是Nextflow新手,此前搭建过其他工具的工作流。PSORTb需指定输出目录,不像我之前用的工具直接生成输出。PSORTb会输出两个文件到指定目录:一个是带时间戳的结果文件(比如20250614162551_psortb_gramneg.txt),另一个是输入文件本身(rgi_proteins.faa)。
在命令行和bash脚本中执行相同命令均正常,但Nextflow流程持续报错:
ERROR ~ Error executing process > 'PSORTB (1)'
Caused by: Missing output file(s) result/*_psortb_gramneg.txt expected by process PSORTB (1)Command executed:
mkdir -p result
psortb -i rgi_proteins.faa -r result --negativeCommand exit status: 0
我的Nextflow脚本如下:
process PSORTB { container = 'brinkmanlab/psortb_commandline:1.0.2' publishDir "psortb_output", mode: 'copy' input: path RGI_proteins output: path "result/*_psortb_gramneg.txt", emit: psortb_results script: """ mkdir -p result psortb -i ${RGI_proteins} -r result --negative """ } workflow { data_ch = Channel.fromPath(params.RGI_proteins) PSORTB(data_ch) }
已耗时两天排查,求解决办法。
解决方案
问题核心是Nextflow的输出文件匹配机制与PSORTb动态文件名的冲突:
- Nextflow默认会在脚本执行前解析输出路径的通配符,而PSORTb生成的结果文件名带动态时间戳,导致预解析阶段找不到匹配文件。
- PSORTb会将输入文件复制到输出目录,但这并非报错的直接原因。
修复方案
方案1:固定输出文件名(推荐)
PSORTb支持通过-o参数直接指定输出文件名,避开动态时间戳。修改脚本如下:
process PSORTB { container = 'brinkmanlab/psortb_commandline:1.0.2' publishDir "psortb_output", mode: 'copy' input: path RGI_proteins output: path "result/psortb_gramneg.txt", emit: psortb_results script: """ mkdir -p result psortb -i ${RGI_proteins} -r result -o psortb_gramneg.txt --negative """ } workflow { data_ch = Channel.fromPath(params.RGI_proteins) PSORTB(data_ch) }
方案2:延迟通配符匹配
若需保留时间戳,可添加glob: true修饰符,让Nextflow在脚本执行后再匹配通配符:
output: path "result/*_psortb_gramneg.txt", glob: true, emit: psortb_results
额外优化:清理冗余输入文件
如果不需要PSORTb复制输入文件到输出目录,可在脚本末尾删除该冗余文件:
script: """ mkdir -p result psortb -i ${RGI_proteins} -r result -o psortb_gramneg.txt --negative rm -f result/${RGI_proteins} """
内容的提问来源于stack exchange,提问作者Sravan Krishna
相关产品推荐
相关产品推荐

