问题我如何指定不需要输入值的参数?我如何引用运行时参数?目标了解如何向命令添加额外的选项。了解如何引用运行时参数。
有时,工具需要额外的命令行选项,这些选项与输入参数并不完全对应。
在本例中,我们将包装Java编译器,以将Java源文件编译为类文件。默认情况下,“javac”将在与源文件相同的目录中创建类文件。然而,CWL输入文件(以及它们所在的目录)可能是只读的,因此我们需要指示“javac”将类文件写入指定的输出目录。
arguments.cwl
#!/usr/bin/env cwl-runnercwlVersion: v1.0class: CommandLineToollabel: Example trivial wrapper for Java 9 compilerhints:DockerRequirement:dockerPull: openjdk:9.0.1-11-slimbaseCommand: javacarguments: ["-d", $(runtime.outdir)]inputs:src:type: FileinputBinding:position: 1outputs:classfile:type: FileoutputBinding:glob: "*.class"
arguments-job.yml
src:class: Filepath: Hello.java
现在,创建一个示例Java文件,并在命令行上调用cwl-runner
$ echo "public class Hello {}" > Hello.java$ cwl-runner arguments.cwl arguments-job.yml[job arguments.cwl] /tmp/tmpwYALo1$ docker \run \-i \--volume=/home/peter/work/common-workflow-language/v1.0/examples/Hello.java:/var/lib/cwl/stg8939ac04-7443-4990-a518-1855b2322141/Hello.java:ro \--volume=/tmp/tmpwYALo1:/var/spool/cwl:rw \--volume=/tmp/tmpptIAJ8:/tmp:rw \--workdir=/var/spool/cwl \--read-only=true \--user=1001 \--rm \--env=TMPDIR=/tmp \--env=HOME=/var/spool/cwl \java:7 \javac \-d \/var/spool/cwl \/var/lib/cwl/stg8939ac04-7443-4990-a518-1855b2322141/Hello.javaFinal process status is success{"classfile": {"size": 416,"location": "/home/example/Hello.class","checksum": "sha1$2f7ac33c1f3aac3f1fec7b936b6562422c85b38a","class": "File"}}
这里,我们使用arguments字段向命令行添加一个附加参数,这个参数不绑定到特定的输入参数。
arguments: ["-d", $(runtime.outdir)]
这个例子引用了一个运行时参数。运行时参数提供了实际执行工具时有关硬件或软件环境的信息。$(runtime.outdir)参数是指定输出目录的路径。其他参数包括$(runtime.tmpdir), $(runtime.ram), $(runtime.cores), $(runtime.outdirSize)和$(runtime.tmpdirSize)。有关详细信息,请参阅CWL规范的运行时环境部分。
