common-workflow-language / user_guide

The CWL v1.0 - v1.2 user guide
http://www.commonwl.org/user_guide/
Other
42 stars 67 forks source link

Add discussion about how command lines work; spaces in options #39

Open mr-c opened 7 years ago

mr-c commented 7 years ago

Real world example: https://github.com/gijzelaerr/spiel/blob/181b889c77a59a83f1939a2e2c08d8aea5e14469/steps/wsclean.cwl

The tool expects -size 2048 2048 and the POSIX shell sh turns that into three entries in the argument array: -size, 2048, and 2048. However this description passes the sizes in as a single string which becomes only two entries -size and 2048 2048 which is rejected by the tool.

Ideally the tool would accept 2048 2048 (with the embedded space) or have split options for each element (like -xsize and -ysize)

Here's a workaround using arguments that doesn't require any code changes to the underlying tool

cwlVersion: v1.0
class: CommandLineTool

baseCommand: wsclean

hints:
  DockerRequirement:
      dockerImageId: kernsuite/wsclean
      dockerFile: |
        FROM kernsuite/base:3
        RUN docker-apt-install wsclean

inputs:
  ms:
    type: Directory
    inputBinding:
      position: 1

  xsize:
    type: int
    default: 2048

  ysize:
    type: int
    default: 2048

  scale:
    type: string
    default: 1asec
    inputBinding:
      prefix: -scale

arguments:
 - -size
 - $(inputs.xsize)
 - $(inputs.ysize)

outputs:
  dirty:
    type: File
    outputBinding:
      glob: wsclean-dirty.fits

  clean:
    type: File
    outputBinding:
      glob: wsclean-clean.fits
mr-c commented 6 years ago

See also https://github.com/common-workflow-language/common-workflow-language/issues/561

Fienne commented 2 years ago

@mr-c I'm finding it difficult to understand this issue. Please can you give me an idea on how to go about it?

annngure commented 2 years ago

@mr-c I would also like an idea on how to go about it.

tetron commented 2 years ago

@Fienne

What michael is saying is that the example he linked to (https://github.com/gijzelaerr/spiel/blob/181b889c77a59a83f1939a2e2c08d8aea5e14469/steps/wsclean.cwl) is wrong and we need a section in the guide that (a) explains why it is wrong and (b) shows the right way to do it. There's also a more general topic of how inputBinding and arguments get put together to make the command line that is actually invoked. Here's some relevant links to the specification:

https://www.commonwl.org/v1.2/CommandLineTool.html#CommandLineTool

https://www.commonwl.org/v1.2/CommandLineTool.html#CommandLineBinding

Fienne commented 2 years ago

Thank you so much!