1. 问题
    2. 当一个工具在多个文件中产生输出时,我该怎么做?
    3. 我如何指定哪些输出文件应该被保存?
    4. 目标
    5. 学习如何创建输出文件数组。

    您还可以使用glob将多个输出文件捕获到文件数组中。
    array-outputs.cwl

    1. #!/usr/bin/env cwl-runner
    2. cwlVersion: v1.0
    3. class: CommandLineTool
    4. baseCommand: touch
    5. inputs:
    6. touchfiles:
    7. type:
    8. type: array
    9. items: string
    10. inputBinding:
    11. position: 1
    12. outputs:
    13. output:
    14. type:
    15. type: array
    16. items: File
    17. outputBinding:
    18. glob: "*.txt"

    array-outputs-job.yml

    1. touchfiles:
    2. - foo.txt
    3. - bar.dat
    4. - baz.txt

    现在调用cwl-runner

    1. $ cwl-runner array-outputs.cwl array-outputs-job.yml
    2. [job 140190876078160] /home/example$ touch foo.txt bar.dat baz.txt
    3. Final process status is success
    4. {
    5. "output": [
    6. {
    7. "size": 0,
    8. "location": "foo.txt",
    9. "checksum": "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709",
    10. "class": "File"
    11. },
    12. {
    13. "size": 0,
    14. "location": "baz.txt",
    15. "checksum": "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709",
    16. "class": "File"
    17. }
    18. ]
    19. }

    正如YAML指南中所描述的,预期输出的数组在array-outputs-job中指定。yml每个条目用一个前导符号-标记。也可以在CWL描述中使用这种格式来标记数组中的条目,如下面的几个部分所示。