Следующий поток: возможно ли преобразовать канал очереди в канал значений?

У меня есть процесс A который выводит файл в канал outA, Я хочу использовать этот файл в качестве входных данных для 3 последующих процессов B, C а также D, Как канал outA По умолчанию создан канал очереди, я не могу напрямую использовать файл более одного раза (в отличие от каналов значений).

В настоящее время я использую into оператор дублировать канал outA как описано здесь (см. код ниже).

Я также знаю, что вы можете создать канал значений из файла, выполнив Channel.value(file('/path/to/file.txt')),

Мой код в настоящее время:

// Upstream process creating a queue channel with one file
process A {
    output:
        file outA
    "echo 'Bonjour le monde !' > $outA"
}

// Queue channel triplication
outA.into {inB; inC; inD}

// Downstream processes all using the same file
process B {
    input:
        file inB
    "script of process B $inB"
}

process C {
    input:
        file inC
    "script of process C $inC"
}

process D {
    input:
        file inD
    "script of process D $inD"
}

У меня нормально работает как есть, но мне интересно, возможно ли преобразовать канал очереди outA в канал значений, так что я могу использовать тот же канал, что и вход для процессов B, C и D.

1 ответ

Решение

Вы можете использовать first() оператор, чтобы сделать это, например:

inX = outA.first()

process B {
    input:
        file inX
    "script of process B $inX"
}

etc

Также обратите внимание, что когда у процесса нет входных данных (например, у процесса A), его выходные данные являются неявно ценными каналами.

Другие вопросы по тегам