Skip to content

Commit d1f1032

Browse files
author
Peter Amstutz
committed
Suppor for ShellCommandRequirement to generate shell command line
1 parent daa8b60 commit d1f1032

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

cwltool/draft2tool.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import urlparse
2121
import tempfile
2222
from builder import CONTENT_LIMIT, substitute
23+
import shellescape
2324

2425
_logger = logging.getLogger("cwltool")
2526

@@ -155,7 +156,18 @@ def job(self, joborder, input_basedir, output_callback, **kwargs):
155156
for t in evr["envDef"]:
156157
j.environment[t["envName"]] = builder.do_eval(t["envValue"])
157158

158-
j.command_line = flatten(map(builder.generate_arg, builder.bindings))
159+
shellcmd, _ = self.get_requirement("ShellCommandRequirement")
160+
if shellcmd:
161+
cmd = []
162+
for b in builder.bindings:
163+
arg = builder.generate_arg(b)
164+
if b.get("shellQuote", True):
165+
arg = [shellescape.quote(a) for a in aslist(arg)]
166+
cmd.extend(aslist(arg))
167+
j.command_line = ["/bin/sh", "-c", " ".join(cmd)]
168+
print j.command_line
169+
else:
170+
j.command_line = flatten(map(builder.generate_arg, builder.bindings))
159171

160172
j.pathmapper = builder.pathmapper
161173
j.collect_outputs = functools.partial(self.collect_output_ports, self.tool["outputs"], builder)

cwltool/process.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
"CreateFileRequirement",
2929
"ScatterFeatureRequirement",
3030
"SubworkflowFeatureRequirement",
31-
"MultipleInputFeatureRequirement"]
31+
"MultipleInputFeatureRequirement",
32+
"ShellCommandRequirement"]
3233

3334
def get_schema():
3435
f = resource_stream(__name__, 'schemas/draft-3/cwl-avro.yml')

0 commit comments

Comments
 (0)