1. 问题
    2. 我如何为一个参数提供多个值?
    3. 目标
    4. 学习如何提供参数数组作为工具的输入。
    5. 了解如何在命令行上控制数组参数的组织。

    向命令行添加表示输入参数的数组很容易。有两种方法可以指定数组参数。首先是使用type: array和定义可能出现在数组中的有效数据类型的项来提供type字段。或者,可以在类型名之后添加方括号[],以表明输入参数是该类型的数组。
    array-inputs.cwl

    1. #!/usr/bin/env cwl-runner
    2. cwlVersion: v1.0
    3. class: CommandLineTool
    4. inputs:
    5. filesA:
    6. type: string[]
    7. inputBinding:
    8. prefix: -A
    9. position: 1
    10. filesB:
    11. type:
    12. type: array
    13. items: string
    14. inputBinding:
    15. prefix: -B=
    16. separate: false
    17. inputBinding:
    18. position: 2
    19. filesC:
    20. type: string[]
    21. inputBinding:
    22. prefix: -C=
    23. itemSeparator: ","
    24. separate: false
    25. position: 4
    26. outputs:
    27. example_out:
    28. type: stdout
    29. stdout: output.txt
    30. baseCommand: echo

    array-inputs-job.yml

    1. filesA: [one, two, three]
    2. filesB: [four, five, six]
    3. filesC: [seven, eight, nine]

    现在调用cwl-runner

    1. $ cwl-runner array-inputs.cwl array-inputs-job.yml
    2. [job array-inputs.cwl] /home/examples$ echo \
    3. -A \
    4. one \
    5. two \
    6. three \
    7. -B=four \
    8. -B=five \
    9. -B=six \
    10. -C=seven,eight,nine > /home/examples/output.txt
    11. [job array-inputs.cwl] completed success
    12. {
    13. "example_out": {
    14. "location": "file:///home/examples/output.txt",
    15. "basename": "output.txt",
    16. "class": "File",
    17. "checksum": "sha1$91038e29452bc77dcd21edef90a15075f3071540",
    18. "size": 60,
    19. "path": "/home/examples/output.txt"
    20. }
    21. }
    22. Final process status is success
    23. $ cat output.txt
    24. -A one two three -B=four -B=five -B=six -C=seven,eight,nine

    inputBinding既可以出现在外部数组参数定义中,也可以出现在内部数组元素定义中,它们在构造命令行时产生不同的行为,如上所示。此外,如果提供了itemSeparator字段,则指定数组值应该连接到由项目分隔符字符串分隔的单个参数中。
    注意,在array-inputs-job.yml中,输入数组是在方括号[]中指定的。数组也可以在多行中表示,其中没有使用关联键定义的数组值用前导符号-标记。这将在下一课中演示,并在YAML指南中进行更详细的讨论。您可以指定数组的数组、记录的数组和其他复杂类型。