1. 问题
  2. 我如何在另一个位置重用参数值?
  3. 目标
  4. 了解如何在描述中使用参数引用。

在前面的示例中,我们使用“tar”程序提取了一个文件。然而,这个示例非常有限,因为它假定我们感兴趣的文件名为“hello.txt,并将其写入.cwl文件中。这不是最好的方式。文件名可能不同或取决于所使用的输入文件。为了避免这种情况,我们可以在作业参数文件(.yml)中指定我们想要的文件名。在这个示例中,您将看到如何从其他字段动态引用输入参数的值,这将允许我们指定要提取的文件名。
tar-param.cwl

  1. #!/usr/bin/env cwl-runner
  2. cwlVersion: v1.0
  3. class: CommandLineTool
  4. baseCommand: [tar, --extract]
  5. inputs:
  6. tarfile:
  7. type: File
  8. inputBinding:
  9. prefix: --file
  10. extractfile:
  11. type: string
  12. inputBinding:
  13. position: 1
  14. outputs:
  15. extracted_file:
  16. type: File
  17. outputBinding:
  18. glob: $(inputs.extractfile)

tar-param-job.yml

  1. tarfile:
  2. class: File
  3. path: hello.tar
  4. extractfile: goodbye.txt

创建输入文件,并在命令行中调用cwl-runner:

  1. $ rm hello.tar || true && touch goodbye.txt && tar -cvf hello.tar goodbye.txt
  2. $ cwl-runner tar-param.cwl tar-param-job.yml
  3. [job tar-param.cwl] /tmp/tmpwH4ouT$ tar \
  4. --extract --file \
  5. /tmp/tmpREYiEt/stgd7764383-99c9-4848-af51-7c2d6e5527d9/hello.tar \
  6. goodbye.txt
  7. [job tar-param.cwl] completed success
  8. {
  9. "extracted_file": {
  10. "location": "file:///home/me/cwl/user_guide/goodbye.txt",
  11. "basename": "goodbye.txt",
  12. "class": "File",
  13. "checksum": "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709",
  14. "size": 0,
  15. "path": "/home/me/cwl/user_guide/goodbye.txt"
  16. }
  17. }
  18. Final process status is success

某些字段允许用$(…)括起来的参数引用。它们将被计算并替换为所引用的值。

  1. outputs:
  2. extracted_out:
  3. type: File
  4. outputBinding:
  5. glob: $(inputs.extractfile)

引用是使用Javascript语法的一个子集编写的。在这个例子$(inputs.extractfile),$(inputs[“extractfile”]), and$(inputs[‘extractfile’])中是等价的。
“inputs”变量的值是调用CWL工具时提供的输入对象。
注意,因为文件参数是对象,要获取输入文件的路径,必须引用文件对象上的path字段;要在上面的示例中引用到tar文件的路径,您可以写入$(inputs.tarfile.path)。

什么地方允许参数引用?

只能在某些字段中使用参数引用。这些是:

  • FromCommandLineTool
    • arguments
      • valueFrom
    • stdin
    • stdout
    • stderr
    • From CommandInputParameter
      • format
      • secondaryFiles
      • FrominputBinding
        • valueFrom
    • From CommandOutputParamater
      • format
      • secondaryFiles
      • From CommandOutputBinding
        • glob
        • outputEval
  • From Workflow
    • From InputParameter and WorkflowOutputParameter
      • format
      • secondaryFiles
      • From steps
        • From WorkflowStepInput
          • valueFrom
  • From ExpressionTool
    • expression
    • From InputParameter and ExpressionToolOutputParameter
      • format
      • secondaryFiles
  • FromResourceRequirement
    • coresMin
    • coresMax
    • ramMin
    • ramMax
    • tmpdirMin
    • tmpdirMax
    • outdirMin
    • outdirMax
  • FromInitialWorkDirRequirement
    • listing
    • in Dirent
      • entry
      • entryname
  • From EnvVarRequirement
    • From EnvironmentDef
      • envValue