Skip to content
Permalink
Browse files

[processing] fix handling for stdout and file outputs in GRASS

algorithms when temporary files are used
  • Loading branch information
alexbruy committed May 22, 2020
1 parent 93648dd commit b5d323c583a9878041bf2ea2082164094a90f605
Showing with 12 additions and 12 deletions.
  1. +12 −12 python/plugins/processing/algs/grass7/Grass7Algorithm.py
@@ -116,6 +116,7 @@ def __init__(self, descriptionfile):
self.commands = []
self.outputCommands = []
self.exportedLayers = {}
self.fileOutputs = {}
self.descriptionFile = descriptionfile

# Default GRASS parameters
@@ -398,6 +399,7 @@ def processAlgorithm(self, original_parameters, context, feedback):
self.commands = []
self.outputCommands = []
self.exportedLayers = {}
self.fileOutputs = {}

# If GRASS session has been created outside of this algorithm then
# get the list of layers loaded in GRASS otherwise start a new
@@ -442,9 +444,12 @@ def processAlgorithm(self, original_parameters, context, feedback):
for out in self.outputDefinitions():
outName = out.name()
if outName in parameters:
outputs[outName] = parameters[outName]
if outName in self.fileOutputs:
outputs[outName] = self.fileOutputs[outName]
else:
outputs[outName] = parameters[outName]
if isinstance(out, QgsProcessingOutputHtml):
self.convertToHtml(parameters[outName])
self.convertToHtml(self.fileOutputs[outName])

return outputs

@@ -643,23 +648,18 @@ def processCommand(self, parameters, context, feedback, delOutputs=False):
# For File destination
if isinstance(out, QgsProcessingParameterFileDestination):
if outName in parameters and parameters[outName] is not None:
outPath = self.parameterAsFileOutput(parameters, outName, context)
self.fileOutputs[outName] = outPath
# for HTML reports, we need to redirect stdout
if out.defaultFileExtension().lower() == 'html':
if outName == 'html':
# for "fake" outputs redirect command stdout
command += ' > "{}"'.format(
self.parameterAsFileOutput(
parameters, outName, context)
)
command += ' > "{}"'.format(outPath)
else:
# for real outputs only output itself should be redirected
command += ' {}=- > "{}"'.format(
outName,
self.parameterAsFileOutput(parameters, outName, context))
command += ' {}=- > "{}"'.format(outName, outPath)
else:
command += ' {}="{}"'.format(
outName,
self.parameterAsFileOutput(parameters, outName, context))
command += ' {}="{}"'.format(outName, outPath)
# For folders destination
elif isinstance(out, QgsProcessingParameterFolderDestination):
# We need to add a unique temporary basename

0 comments on commit b5d323c

Please sign in to comment.
You can’t perform that action at this time.