【9.3.1.5】CWL其他参数

有时,工具需要额外的命令行选项,这些选项与输入参数不完全对应。

在本例中,我们将封装Java编译器,将Java源文件编译为类文件。默认情况下,“javac”将在与源文件相同的目录中创建类文件。然而,CWL输入文件(以及它们出现的目录)可能是只读的,因此我们需要指示“javac”将类文件写入指定的输出目录。

arguments.cwl

#!/usr/bin/env cwl-runner

cwlVersion: v1.0
class: CommandLineTool
label: Example trivial wrapper for Java 9 compiler
hints:
  DockerRequirement:
    dockerPull: openjdk:9.0.1-11-slim
baseCommand: javac
arguments: ["-d", $(runtime.outdir)]
inputs:
  src:
    type: File
    inputBinding:
      position: 1
outputs:
  classfile:
    type: File
    outputBinding:
      glob: "*.class"

arguments-job.yml

src:
  class: File
  path: Hello.java

接下来,创建一个示例Java文件,用于命令行工具。

echo "public class Hello {}" > Hello.java

现在调用cwltool,在命令行上提供工具描述和输入对象:

$ cwltool arguments.cwl arguments-job.yml
INFO /opt/hostedtoolcache/Python/3.9.14/x64/bin/cwltool 3.1.20221008225030
INFO Resolved 'arguments.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/additional-arguments-and-parameters/arguments.cwl'
INFO [job arguments.cwl] /tmp/hqr614bh$ docker \
    run \
    -i \
    --mount=type=bind,source=/tmp/hqr614bh,target=/YZibwP \
    --mount=type=bind,source=/tmp/0uoqp774,target=/tmp \
    --mount=type=bind,source=/home/runner/work/user_guide/user_guide/src/_includes/cwl/additional-arguments-and-parameters/Hello.java,target=/var/lib/cwl/stg1aa3b471-2762-4c45-a5d3-d2135889d6cd/Hello.java,readonly \
    --workdir=/YZibwP \
    --read-only=true \
    --user=1001:121 \
    --rm \
    --cidfile=/tmp/od0a_qoa/20221018123339-408205.cid \
    --env=TMPDIR=/tmp \
    --env=HOME=/YZibwP \
    openjdk:9.0.1-11-slim \
    javac \
    -d \
    /YZibwP \
    /var/lib/cwl/stg1aa3b471-2762-4c45-a5d3-d2135889d6cd/Hello.java
INFO [job arguments.cwl] Max memory used: 0MiB
INFO [job arguments.cwl] completed success
{
    "classfile": {
        "location": "file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/additional-arguments-and-parameters/Hello.class",
        "basename": "Hello.class",
        "class": "File",
        "checksum": "sha1$fdb876b40ad9ebc7fee873212e02d5940588642e",
        "size": 184,
        "path": "/home/runner/work/user_guide/user_guide/src/_includes/cwl/additional-arguments-and-parameters/Hello.class"
    }
}
INFO Final process status is success

在这里,我们使用arguments字段向命令行添加一个不绑定到特定输入参数的附加参数。

arguments: ["-d", $(runtime.outdir)]

此示例引用了一个运行时参数。当工具实际执行时,运行时参数提供有关硬件或软件环境的信息。$(runtime.outdir)参数是指向指定输出目录的路径。其他参数包括$(runtime.tmpdir)、$(running.ram)、$)runtime.cores、$(runtime.outdirSize)和$(runtime.tmpdirSize)。有关详细信息,请参阅CWL规范的“运行时环境”部分。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn