

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Résultats des tâches dans une définition HealthOmics de flux de travail
<a name="workflows-task-outputs"></a>

Vous spécifiez les résultats des tâches dans la définition du flux de travail. Par défaut, HealthOmics supprime tous les fichiers de tâches intermédiaires lorsque le flux de travail est terminé. Pour exporter un fichier intermédiaire, vous devez le définir comme sortie. 

Si vous utilisez la mise en cache des appels, HealthOmics enregistre les résultats des tâches dans le cache, y compris les fichiers intermédiaires que vous définissez comme sorties.

Les rubriques suivantes incluent des exemples de définition de tâches pour chacun des langages de définition de flux de travail.

**Topics**
+ [Sorties de tâches pour WDL](#workflow-task-outputs-wdl)
+ [Sorties de tâches pour Nextflow](#workflow-task-outputs-nextflow)
+ [Sorties de tâches pour CWL](#workflow-task-outputs-cwl)

## Sorties de tâches pour WDL
<a name="workflow-task-outputs-wdl"></a>

Pour les définitions de flux de travail écrites en WDL, définissez vos sorties dans la **outputs** section de flux de travail de niveau supérieur. 

HealthOmics

**Topics**
+ [Sortie de tâche pour STDOUT](#task-outputs-wdl-stdout)
+ [Sortie de tâche pour STDERR](#task-outputs-wdl-stderr)
+ [Sortie de tâche vers un fichier](#task-outputs-wdl-file)
+ [Sortie de tâches vers un tableau de fichiers](#task-outputs-wdl-files)

### Sortie de tâche pour STDOUT
<a name="task-outputs-wdl-stdout"></a>

Cet exemple crée une tâche nommée `SayHello` qui renvoie le contenu STDOUT au fichier de sortie de la tâche. **La **stdout** fonction WDL capture le contenu STDOUT (dans cet exemple, la chaîne d'entrée Hello World \$1** ) dans le fichier**stdout\$1file**. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDOUT, le résultat apparaît également dans CloudWatch les journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

```
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()
    }
}
```

### Sortie de tâche pour STDERR
<a name="task-outputs-wdl-stderr"></a>

Cet exemple crée une tâche nommée `SayHello` qui renvoie le contenu STDERR au fichier de sortie de la tâche. **La **stderr** fonction WDL capture le contenu STDERR (dans cet exemple, la chaîne d'entrée Hello World \$1** ) dans le fichier**stderr\$1file**. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDERR, le résultat apparaîtra dans les CloudWatch journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

```
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()
    }
}
```

### Sortie de tâche vers un fichier
<a name="task-outputs-wdl-file"></a>

Dans cet exemple, la SayHello tâche crée deux fichiers (message.txt et info.txt) et déclare explicitement ces fichiers en tant que sorties nommées (message\$1file et 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"
    } 
}
```

### Sortie de tâches vers un tableau de fichiers
<a name="task-outputs-wdl-files"></a>

Dans cet exemple, la `GenerateGreetings` tâche génère un tableau de fichiers comme résultat de la tâche. La tâche génère dynamiquement un fichier d'accueil pour chaque membre du tableau d'entrée`names`. Comme les noms de fichiers ne sont pas connus avant l'exécution, la définition de sortie utilise la fonction WDL glob () pour afficher tous les fichiers correspondant au modèle. `*_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")
    }       
 }
```

## Sorties de tâches pour Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Pour les définitions de flux de travail écrites dans Nextflow, définissez une directive **PublishDir** pour exporter le contenu des tâches vers votre compartiment Amazon S3 de sortie. Définissez la valeur **PublishDir sur**. `/mnt/workflow/pubdir` 

 HealthOmics Pour exporter des fichiers vers Amazon S3, les fichiers doivent se trouver dans ce répertoire.

Si une tâche produit un groupe de fichiers de sortie à utiliser comme entrées pour une tâche ultérieure, nous vous recommandons de regrouper ces fichiers dans un répertoire et d'émettre le répertoire en tant que sortie de tâche. L'énumération de chaque fichier individuel peut entraîner un engorgement des E/S dans le système de fichiers sous-jacent. Par exemple :

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

## Sorties de tâches pour CWL
<a name="workflow-task-outputs-cwl"></a>

Pour les définitions de flux de travail écrites en CWL, vous pouvez spécifier les résultats des tâches à l'aide de `CommandLineTool` tâches. Les sections suivantes présentent des exemples de `CommandLineTool` tâches qui définissent différents types de sorties.

**Topics**
+ [Sortie de tâche pour STDOUT](#task-outputs-cwl-stdout)
+ [Sortie de tâche pour STDERR](#task-outputs-cwl-stderr)
+ [Sortie de tâche vers un fichier](#task-outputs-cwl-file)
+ [Sortie de tâches vers un tableau de fichiers](#task-outputs-cwl-files)

### Sortie de tâche pour STDOUT
<a name="task-outputs-cwl-stdout"></a>

Cet exemple crée une `CommandLineTool` tâche qui renvoie le contenu STDOUT dans un fichier de sortie texte nommé. **output.txt** Par exemple, si vous fournissez l'entrée suivante, le résultat de la tâche est **Hello World \$1** dans le **output.txt** dossier.

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

La `outputs` directive indique que le nom de sortie est **example\$1out** et que son type est`stdout`. Pour qu'une tâche en aval consomme le résultat de cette tâche, elle désignera la sortie sous la forme`example_out`.

Dans la mesure HealthOmics où il crée des journaux pour tout le contenu STDERR et STDOUT, le résultat apparaît également dans les CloudWatch journaux, ainsi que d'autres informations de journalisation STDERR relatives à la tâche.

```
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
```

### Sortie de tâche pour STDERR
<a name="task-outputs-cwl-stderr"></a>

Cet exemple crée une `CommandLineTool` tâche qui renvoie le contenu STDERR dans un fichier de sortie texte nommé. **stderr.txt** La tâche modifie le `baseCommand` afin qu'il `echo` écrit sur STDERR (au lieu de STDOUT).

La `outputs` directive indique que le nom de sortie est **stderr\$1out** et que son type est`stderr`. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDERR et STDOUT, le résultat apparaîtra dans les CloudWatch journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

```
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
```

### Sortie de tâche vers un fichier
<a name="task-outputs-cwl-file"></a>

Cet exemple crée une `CommandLineTool` tâche qui crée une archive tar compressée à partir des fichiers d'entrée. Vous indiquez le nom de l'archive en tant que paramètre d'entrée (archive\$1name). 

La **outputs** directive indique que le type `archive_file` de sortie est`File`, et elle utilise une référence au paramètre d'entrée `archive_name` pour établir une liaison avec le fichier de sortie.

```
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
```

### Sortie de tâches vers un tableau de fichiers
<a name="task-outputs-cwl-files"></a>

Dans cet exemple, la `CommandLineTool` tâche crée un tableau de fichiers à l'aide de la `touch` commande. La commande utilise les chaînes du paramètre `files-to-create` d'entrée pour nommer les fichiers. La commande génère un tableau de fichiers. Le tableau inclut tous les fichiers du répertoire de travail qui correspondent au `glob` modèle. Cet exemple utilise un motif générique (« \$1 ») qui correspond à tous les fichiers.

```
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
```