问题
如何向命令传递参数?
如何为命令定义参数的顺序?
目标
学习如何描述和处理工具的输入参数和文件。
工具的输入是控制如何运行工具的输入参数列表。每个参数都有一个用于参数名称的id,以及描述对该参数有效的值类型的类型。
可用的基本类型有string、int、long、float、double和null;复杂类型是数组和记录;此外,还有特殊类型的文件,目录和其它。
下面的例子演示了一些不同类型的输入参数,它们以不同的方式出现在命令行中。
首先,创建一个名为inp的文件,内容如下例:
inp.cwl
#!/usr/bin/env cwl-runner
cwlVersion: v1.0
class: CommandLineTool
baseCommand: echo
inputs:
example_flag:
type: boolean
inputBinding:
position: 1
prefix: -f
example_string:
type: string
inputBinding:
position: 3
prefix: --example-string
example_int:
type: int
inputBinding:
position: 2
prefix: -i
separate: false
example_file:
type: File?
inputBinding:
prefix: --file=
separate: false
position: 4
outputs: []
创建一个名为inp-job.yml的文件
inp-job.yml
example_flag: true
example_string: hello
example_int: 42
example_file:
class: File
path: whale.txt
注意,作为文件类型的“example_file”必须作为一个对象提供,其中包含字段类:File和path。
接下来,通过在命令行上输入touch whale.txt,使用touch创建一个whale.txt文件。然后cwl-runner命令调用输入对象,使用命令cwl-runner inp.cwl inp-job.yml。下面是这两个命令和预期的命令行输出:
$ touch whale.txt
$ cwl-runner inp.cwl inp-job.yml
[job inp.cwl] /tmp/tmpzrSnfX$ echo \
-f \
-i42 \
--example-string \
hello \
--file=/tmp/tmpRBSHIG/stg979b6d24-d50a-47e3-9e9e-90097eed2cbc/whale.txt
-f -i42 --example-string hello --file=/tmp/tmpRBSHIG/stg979b6d24-d50a-47e3-9e9e-90097eed2cbc/whale.txt
[job inp.cwl] completed success
{}
Final process status is success
这些/tmp路径来自哪里?
CWL引用运行器(cwltool)和其他运行器创建临时目录,其中包含指向输入文件的符号软链接,以确保这些工具不会意外地访问没有显式指定的文件
字段inputBinding是可选的,它指示输入参数是否应该以及如何出现在工具的命令行中。如果inputBinding缺失,则该参数不会出现在命令行中。让我们详细地看看每个示例。
example_flag:
type: boolean
inputBinding:
position: 1
prefix: -f
type为布尔类型。如果输入参数” example_flag “为” true “,那么prefix的参数将被添加到命令行。如果为false,则不添加参数。
example_string:
type: string
inputBinding:
position: 3
prefix: --example-string
字符串类型以文字值的形式出现在命令行中。该前缀是可选的,如果提供了,它将作为单独的参数出现在参数之前的命令行中。在上面的示例中,它被呈现为—example-string hello。
example_int:
type: int
inputBinding:
position: 2
prefix: -i
separate: false
整数(和浮点)类型以十进制文本表示出现在命令行中。当选项separate为false(默认值为true)时,前缀和值被组合成一个参数。在上面的例子中,它显示为-i42。
example_file:
type: File?
inputBinding:
prefix: --file=
separate: false
position: 4
文件类型作为文件的路径出现在命令行中。当参数类型以问号结尾时,表示该参数为可选参数。在上面的例子中,这显示为—file=/tmp/random/path/whale.txt。但是,如果在输入中没有提供“example_file”参数,命令行中将不会出现任何内容。
输入文件是只读的。如果希望更新输入文件,必须首先将其复制到输出目录。
position的值用于确定parameter在命令行中应该出现的位置。位置是相对的,而不是绝对的。因此,位置不一定是连续的,位置为1、3、5的三个参数将产生与1、2、3相同的命令行。多个参数可以具有相同的位置(使用参数名打破联系),并且位置字段本身是可选的。默认位置是0。
baseCommand字段将始终出现在最后的命令行参数之前。