2

我一直在尝试在 CWL 中编写将 stdout 和 stderr 附加到特定目录中的文件的描述,例如printf 'some message' >> out_directory/out_file 2>&1

使用以下 CWL 描述:

# File: test.cwl
cwlVersion: v1.0
class: CommandLineTool

requirements:
- class: InlineJavascriptRequirement

baseCommand: [printf]

inputs:
  message:
    type: string
    inputBinding:
      position: 1

  output_name: 
    type: string

  output_dir: 
    type: string  

stdout: $(inputs.output_name)
stderr: $(inputs.output_name)

outputs:
  output:
    type: File
    outputBinding:
      glob: $(inputs.output_dir)/$(inputs.output_name)

和输入文件:

# File: test.yml
message: 'some message'
output_name: out_file
output_dir: out_directory

我收到这个错误

Error collecting output for parameter 'output':
test.cwl:28:7: Did not find output file with glob pattern: '['out_directory/out_file']'

关于打印到特定目录的任何想法?另外,我怎样才能使用 >> 而不是 > ?

谢谢!

4

2 回答 2

1

我终于按照这里的答案设法将输出移动到特定目录

outputs:
  output:
    type: stdout
  output_directory:
    type: Directory
    outputBinding:
      glob: .
      outputEval: |
        ${
          self[0].basename = inputs.output_dir;
          return self[0]
        }
于 2021-12-06T10:40:00.473 回答
0

查看用户指南的“捕获标准输出”部分:https ://www.commonwl.org/user_guide/05-stdout/index.html 。它有一个如何使用stdout变量的示例。

在您的示例中,我认为您File在使用stdout. 相反,您可以将其作为您的工作流文件。

# File: test.cwl
cwlVersion: v1.0
class: CommandLineTool

requirements:
- class: InlineJavascriptRequirement

baseCommand: [printf]

inputs:
  message:
    type: string
    inputBinding:
      position: 1

  output_name: 
    type: string
 

stdout: $(inputs.output_name)
stderr: $(inputs.output_name)

outputs:
  output:
    type: stdout

这作为输入:

# File: input.yaml
message: 'some message'
output_name: out_file

您不需要为输出目录传递输入参数。默认情况下,它将与您的工作流程一起在您的本地目录中结束,但您可以使用以下命令对其进行更改:

(venv) kinow@ranma:/tmp$ cwltool --outdir=out_directory test.cwl input.yaml
INFO /home/kinow/Development/python/workspace/cwltool/venv/bin/cwltool 3.1.20211004060744
INFO Resolved 'test.cwl' to 'file:///tmp/test.cwl'
INFO [job test.cwl] /tmp/gpsyzk7h$ printf \
    'some message' > /tmp/gpsyzk7h/out_file 2> /tmp/gpsyzk7h/out_file
INFO [job test.cwl] completed success
{
    "output": {
        "location": "file:///tmp/out_directory/out_file",
        "basename": "out_file",
        "class": "File",
        "checksum": "sha1$af52b1a96761839824b7b4c0e6cea4b09f2b0710",
        "size": 12,
        "path": "/tmp/out_directory/out_file"
    }
}
INFO Final process status is success
(venv) kinow@ranma:/tmp$ cat out_directory/out_file 
some message

这样你就out_file应该出现在./out_directory.

对于未来有关 CWL 的问题,您可能希望将其发布到 CWL Discourse 论坛:https ://cwl.discourse.group/

-布鲁诺

于 2021-12-04T11:17:17.127 回答