我有以下简化的任务并在执行时遇到一些错误。
我正在尝试通过 Python 从字符串中获取 4 个字母,并将其用作新文件夹的名称。我的代码如下:
#!/usr/bin/env nextflow
params.string="abcdefg"
process PYTHON{
input:
val string
output:
val substring
"""
#!/usr/bin/env python
substring="$string"[0:4]
"""
}
process CREAT_FOLDER{
input:
val name
"""
mkdir $name
"""
}
workflow{
name = PYTHON(params.string)
CREAT_FOLDER(name)
}
出现错误。
N E X T F L O W ~ version 23.04.1
Launching `python.nf` [shrivelled_kay] DSL2 - revision: 0e01fd9b95
executor > local (1)
executor > local (1)
[33/e827c9] process > PYTHON [100%] 1 of 1, failed: 1 ✘
[- ] process > CREAT_FOLDER -
ERROR ~ Error executing process > 'PYTHON'
Caused by:
Missing value declared as output parameter: substring
变量“substring”显然不能通过通道。 那么如何将 Python 变量传递到通道中呢?
val
限定符声明它。通常的解决方案是在您的 script
块中定义这些,然后让 Nextflow 将它们嵌入到您的 Perl/Python/Bash 脚本中,例如:
params.string="abcdefg"
process PYTHON{
debug true
input:
val string
output:
val substring
script:
substring = string.substring(0, 4)
"""
#!/usr/bin/env python
the_substring='${substring}'
print(f'The substring: {the_substring}')
"""
}
process CREAT_FOLDER{
debug true
input:
val name
"""
mkdir -v "${name}"
"""
}
workflow{
name = PYTHON(params.string)
CREAT_FOLDER(name)
}
结果:
$ nextflow run main.nf
N E X T F L O W ~ version 23.04.1
Launching `main.nf` [fervent_brazil] DSL2 - revision: 0676556654
executor > local (2)
[3e/3f2501] process > PYTHON [100%] 1 of 1 ✔
[5b/fbcccb] process > CREAT_FOLDER [100%] 1 of 1 ✔
The substring: abcd
mkdir: created directory 'abcd'