如果您的脚本执行非平凡的计算,则像您所做的那样将结果写入文件绝对没问题 - 这种方法并没有什么问题。但是,由于“inter_ch”通道已经发出文件(或路径),您可以简单地使用:
ch = inter_ch.map { it.text }
这里的目标并不完全清楚。如果希望减少创建的频道数量,请考虑改用新的DSL 2。这不会让您避免将计算结果写入文件,但可能意味着您可以避免中间通道。
另一方面,如果您的 Python 脚本实际上做了一些相当微不足道的事情并且可以重构掉,则可以分配一个(全局)变量(在 script: 关键字下方),以便可以在您的输出声明,如下例中的x = ... 行:
有效output
values
是值文字、输入值标识符、可在
过程范围和值表达式。例如:
process foo {
input:
file fasta from 'dummy'
output:
val x into var_channel
val 'BB11' into str_channel
val "${fasta.baseName}.out" into exp_channel
script:
x = fasta.name
"""
cat $x > file
"""
}
除此之外,您的选择是有限的。您可能考虑过使用env output qualifier,但这只是在运行时向您的 shell 脚本添加了一些语法糖,因此仍会创建一个输出文件:
test.nf的内容:
process test {
output:
env myval into out_ch
script:
'''
myval=$(calc.py)
'''
}
out_ch.view()
bin/calc.py 的内容(chmod +x):
#!/usr/bin/env python
print('foobarbaz')
运行:
$ nextflow run test.nf
N E X T F L O W ~ version 21.04.3
Launching `test.nf` [magical_bassi] - revision: ba61633d9d
executor > local (1)
[bf/48815a] process > test [100%] 1 of 1 ✔
foobarbaz
$ cat work/bf/48815aeefecdac110ef464928f0471/.command.sh
#!/bin/bash -ue
myval=$(calc.py)
# capture process environment
set +u
echo myval=$myval > .command.env