

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Saídas de tarefas em uma definição de HealthOmics fluxo de trabalho
<a name="workflows-task-outputs"></a>

Você especifica as saídas da tarefa na definição do fluxo de trabalho. Por padrão, HealthOmics descarta todos os arquivos de tarefas intermediárias quando o fluxo de trabalho é concluído. Para exportar um arquivo intermediário, você o define como uma saída. 

Se você usar o cache de chamadas, HealthOmics salva as saídas da tarefa no cache, incluindo todos os arquivos intermediários que você definir como saídas.

Os tópicos a seguir incluem exemplos de definição de tarefas para cada uma das linguagens de definição de fluxo de trabalho.

**Topics**
+ [Saídas de tarefas para WDL](#workflow-task-outputs-wdl)
+ [Saídas de tarefas para Nextflow](#workflow-task-outputs-nextflow)
+ [Saídas de tarefas para CWL](#workflow-task-outputs-cwl)

## Saídas de tarefas para WDL
<a name="workflow-task-outputs-wdl"></a>

Para definições de fluxo de trabalho escritas em WDL, defina suas saídas na seção de fluxo **outputs** de trabalho de nível superior. 

HealthOmics

**Topics**
+ [Saída de tarefa para STDOUT](#task-outputs-wdl-stdout)
+ [Saída de tarefa para STDERR](#task-outputs-wdl-stderr)
+ [Saída da tarefa para um arquivo](#task-outputs-wdl-file)
+ [Saída de tarefas para uma matriz de arquivos](#task-outputs-wdl-files)

### Saída de tarefa para STDOUT
<a name="task-outputs-wdl-stdout"></a>

Este exemplo cria uma tarefa chamada `SayHello` que ecoa o conteúdo STDOUT no arquivo de saída da tarefa. **A **stdout** função WDL captura o conteúdo STDOUT (neste exemplo, a string de entrada Hello World\$1** ) no arquivo**stdout\$1file**. 

Como HealthOmics cria registros para todo o conteúdo STDOUT, a saída também aparece em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stdout_file = SayHello.stdout_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" 
        echo "Current date: $(date)"
        echo "This message was printed to STDOUT"
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stdout_file = stdout()
    }
}
```

### Saída de tarefa para STDERR
<a name="task-outputs-wdl-stderr"></a>

Este exemplo cria uma tarefa chamada `SayHello` que ecoa o conteúdo STDERR no arquivo de saída da tarefa. **A **stderr** função WDL captura o conteúdo STDERR (neste exemplo, a string de entrada Hello World\$1** ) no arquivo**stderr\$1file**. 

Como HealthOmics cria registros para todo o conteúdo STDERR, a saída aparecerá em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stderr_file = SayHello.stderr_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" >&2
        echo "Current date: $(date)" >&2
        echo "This message was printed to STDERR" >&2
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stderr_file = stderr()
    }
}
```

### Saída da tarefa para um arquivo
<a name="task-outputs-wdl-file"></a>

Neste exemplo, a SayHello tarefa cria dois arquivos (message.txt e info.txt) e declara explicitamente esses arquivos como as saídas nomeadas (message\$1file e info\$1file). 

```
version 1.0
workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File message_file = SayHello.message_file
        File info_file = SayHello.info_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        # Create message file
        echo "~{message}" > message.txt
        
        # Create info file with date and additional information
        echo "Current date: $(date)" > info.txt
        echo "This message was saved to a file" >> info.txt
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File message_file = "message.txt"
        File info_file = "info.txt"
    } 
}
```

### Saída de tarefas para uma matriz de arquivos
<a name="task-outputs-wdl-files"></a>

Neste exemplo, a `GenerateGreetings` tarefa gera uma matriz de arquivos como saída da tarefa. A tarefa gera dinamicamente um arquivo de saudação para cada membro da matriz de entrada. `names` Como os nomes dos arquivos não são conhecidos até o tempo de execução, a definição de saída usa a função WDL glob () para gerar todos os arquivos que correspondam ao padrão. `*_greeting.txt` 

```
version 1.0
 workflow HelloArray {
    input {
        Array[String] names = ["World", "Friend", "Developer"]
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call GenerateGreetings {
        input:
            names = names,
            container = ubuntu_container
    }

    output {
        Array[File] greeting_files = GenerateGreetings.greeting_files
    }
}

task GenerateGreetings {
    input {
        Array[String] names
        String container
    }

    command  <<<
        # Create a greeting file for each name
        for name in ~{sep=" " names}; do
            echo "Hello, $name!" > ${name}_greeting.txt
        done
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        Array[File] greeting_files = glob("*_greeting.txt")
    }       
 }
```

## Saídas de tarefas para Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Para definições de fluxo de trabalho escritas no Nextflow, defina uma diretiva **PublishDir** para exportar o conteúdo da tarefa para seu bucket de saída do Amazon S3. Defina o valor **PublishDir** como`/mnt/workflow/pubdir`. 

 HealthOmics Para exportar arquivos para o Amazon S3, os arquivos devem estar nesse diretório.

Se uma tarefa produzir um grupo de arquivos de saída para uso como entradas para uma tarefa subseqüente, recomendamos que você agrupe esses arquivos em um diretório e emita o diretório como uma saída de tarefa. A enumeração de cada arquivo individual pode resultar em um gargalo de E/S no sistema de arquivos subjacente. Por exemplo:

```
process my_task {
      ...
      // recommended
      output "output-folder/", emit: output
      
      // not recommended
      // output "output-folder/**", emit: output
      ...
  }
```

## Saídas de tarefas para CWL
<a name="workflow-task-outputs-cwl"></a>

Para definições de fluxo de trabalho escritas em CWL, você pode especificar as saídas da tarefa usando `CommandLineTool` tarefas. As seções a seguir mostram exemplos de `CommandLineTool` tarefas que definem diferentes tipos de saídas.

**Topics**
+ [Saída de tarefa para STDOUT](#task-outputs-cwl-stdout)
+ [Saída de tarefa para STDERR](#task-outputs-cwl-stderr)
+ [Saída da tarefa para um arquivo](#task-outputs-cwl-file)
+ [Saída de tarefas para uma matriz de arquivos](#task-outputs-cwl-files)

### Saída de tarefa para STDOUT
<a name="task-outputs-cwl-stdout"></a>

Este exemplo cria uma `CommandLineTool` tarefa que ecoa o conteúdo STDOUT em um arquivo de saída de texto chamado. **output.txt** Por exemplo, se você fornecer a seguinte entrada, a saída da tarefa resultante será **Hello World\$1** no **output.txt** arquivo.

```
{
    "message": "Hello World!"
}
```

A `outputs` diretiva especifica que o nome da saída é **example\$1out** e seu tipo é`stdout`. Para que uma tarefa posterior consuma a saída dessa tarefa, ela se referiria à saída como`example_out`.

Como HealthOmics cria registros para todo o conteúdo STDERR e STDOUT, a saída também aparece em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: echo
stdout: output.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
outputs:
  example_out:
    type: stdout

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Saída de tarefa para STDERR
<a name="task-outputs-cwl-stderr"></a>

Este exemplo cria uma `CommandLineTool` tarefa que ecoa o conteúdo STDERR em um arquivo de saída de texto chamado. **stderr.txt** A tarefa modifica o `baseCommand` para que seja `echo` gravado em STDERR (em vez de STDOUT).

A `outputs` diretiva especifica que o nome da saída é **stderr\$1out** e seu tipo é`stderr`. 

Como HealthOmics cria registros para todo o conteúdo STDERR e STDOUT, a saída aparecerá em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [bash, -c]
stderr: stderr.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
      shellQuote: true
      valueFrom: "echo $(self) >&2"
outputs:
  stderr_out:
    type: stderr

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Saída da tarefa para um arquivo
<a name="task-outputs-cwl-file"></a>

Este exemplo cria uma `CommandLineTool` tarefa que cria um arquivo tar compactado a partir dos arquivos de entrada. Você fornece o nome do arquivo como um parâmetro de entrada (archive\$1name). 

A **outputs** diretiva especifica que o tipo de `archive_file` saída é `File` e usa uma referência ao parâmetro de entrada `archive_name` para vincular ao arquivo de saída.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, cfz]
inputs:
  archive_name:
    type: string
    inputBinding:
      position: 1
  input_files:
    type: File[]
    inputBinding:
      position: 2
      
outputs:
  archive_file:
    type: File
    outputBinding:
      glob: "$(inputs.archive_name)"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Saída de tarefas para uma matriz de arquivos
<a name="task-outputs-cwl-files"></a>

Neste exemplo, a `CommandLineTool` tarefa cria uma matriz de arquivos usando o `touch` comando. O comando usa as cadeias de caracteres no parâmetro `files-to-create` de entrada para nomear os arquivos. O comando gera uma matriz de arquivos. A matriz inclui todos os arquivos no diretório de trabalho que correspondam ao `glob` padrão. Este exemplo usa um padrão curinga (“\$1”) que corresponde a todos os arquivos.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: touch
inputs:
  files-to-create:
    type:
      type: array
      items: string
    inputBinding:
      position: 1
outputs:
  output-files:
    type:
      type: array
      items: File
    outputBinding:
      glob: "*"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```