通过 Nextflow 通道传递 Python 变量

问题描述 投票:0回答:1

我有以下简化的任务并在执行时遇到一些错误。

我正在尝试通过 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 变量传递到通道中呢?

python variable-assignment nextflow
1个回答
0
投票

问题是您需要一个全局范围的变量才能使用

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'


© www.soinside.com 2019 - 2024. All rights reserved.