本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
工作 HealthOmics 流程定义中的任务输出
您可以在工作流定义中指定任务输出。默认情况下,当工作流程完成时,会 HealthOmics 丢弃所有中间任务文件。要导出中间文件,请将其定义为输出。
如果您使用呼叫缓存,则 HealthOmics 会将任务输出保存到缓存中,包括您定义为输出的任何中间文件。
以下主题包括每种工作流定义语言的任务定义示例。
WDL 的任务输出
对于用 WDL 编写的工作流程定义,请在顶级工作流程outputs部分中定义您的输出。
HealthOmics
STDOUT 的任务输出
此示例创建了一个名为的任务SayHello
,该任务将 STDOUT 内容回显到任务输出文件中。WDL stdout 函数捕获 STDOUT 内容(在本例中为输入字符串 Hello World! ) 在文件中stdout_file。
由于 HealthOmics 会为所有 STDOUT 内容创建日志,因此输出也会与任务的其他 STDERR CloudWatch 日志信息一起显示在 “日志” 中。
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() } }
STDERR 的任务输出
此示例创建了一个名为的任务SayHello
,该任务将 STDERR 内容回显到任务输出文件中。WDL stderr 函数捕获 STDERR 内容(在本例中为输入字符串 Hello World! ) 在文件中stderr_file。
由于 HealthOmics 会为所有 STDERR 内容创建日志,因此输出将与任务的其他 STDERR CloudWatch 日志信息一起显示在日志中。
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() } }
任务输出到文件
在此示例中,该 SayHello 任务创建了两个文件(message.txt 和 info.txt),并将这些文件明确声明为命名的输出(message_file 和 info_file)。
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" } }
任务输出到文件数组
在此示例中,GenerateGreetings
任务生成一组文件作为任务输出。该任务为输入数组的每个成员动态生成一个问候语文件names
。由于文件名要等到运行时才知道,因此输出定义使用 WDL glob () 函数输出与该模式匹配的所有文件。*_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") } }
下一流的任务输出
对于在 Nextflow 中编写的工作流程定义,请定义 P ublishDir 指令以将任务内容导出到您的输出 Amazon S3 存储桶。将 p ublishDir 值设置为。/mnt/workflow/pubdir
HealthOmics 要将文件导出到 Amazon S3,文件必须位于此目录中。
如果任务生成一组输出文件作为后续任务的输入,我们建议您将这些文件分组到一个目录中,然后将该目录作为任务输出发出。枚举每个单独的文件可能会导致底层文件系统出现 I/O 瓶颈。例如:
process my_task { ... // recommended output "output-folder/", emit: output // not recommended // output "output-folder/**", emit: output ... }
CWL 的任务输出
对于用 CWL 编写的工作流程定义,您可以使用任务指定任务输出。CommandLineTool
以下各节显示了定义不同类型输出的CommandLineTool
任务示例。
STDOUT 的任务输出
此示例创建了一个CommandLineTool
任务,该任务将 STDOUT 内容回显到名为的文本输出文件中。output.txt例如,如果您提供以下输入,则生成的任务输出为 Hello World! 在output.txt文件中。
{ "message": "Hello World!" }
该outputs
指令指定输出名称为example_out,其类型为stdout
。要使下游任务消耗此任务的输出,它将输出称为example_out
。
由于 HealthOmics 会为所有 STDERR 和 STDOUT 内容创建日志,因此输出也会与任务的其他 STDERR CloudWatch 日志信息一起显示在日志中。
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
STDERR 的任务输出
此示例创建了一个CommandLineTool
任务,该任务将 STDERR 内容回显到名为的文本输出文件中。stderr.txt该任务会修改,baseCommand
以便echo
写入 STDERR(而不是 STDOUT)。
该outputs
指令指定输出名称为stderr_out,其类型为stderr
。
由于 HealthOmics 会为所有 STDERR 和 STDOUT 内容创建日志,因此输出将与任务的其他 STDERR CloudWatch 日志信息一起显示在日志中。
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
任务输出到文件
此示例创建了一个CommandLineTool
任务,该任务根据输入文件创建压缩的 tar 存档。您可以将档案的名称作为输入参数 (archive_name) 提供。
该outputs指令指定archive_file
输出类型为File
,并使用对输入参数的引用绑定archive_name
到输出文件。
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
任务输出到文件数组
在此示例中,CommandLineTool
任务使用touch
命令创建文件数组。该命令使用files-to-create
输入参数中的字符串来命名文件。该命令输出文件数组。该数组包括工作目录中与glob
模式匹配的所有文件。此示例使用与所有文件匹配的通配符模式 (“*”)。
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