I created a python script tool. The user runs the script after setting the inputs. I would like to bring the generated ouput in the code variable outFeatures (polygons) back into the model as the script's output.
. . .
outFeatures = os.path.join(shp_output_folder,"cont_hs.shp")
. . .
I get a blank output in the model as shown in pic, no matter what. Nothing I tried works:
(1) setting the script's outFeatures output parameter Data Type as "Shapefile" or "feature class" or "file" or "string" and as a "Derived" Type, yield a blank output.
(2) Within the python code, I tried adding the result object and using the result[0] object as an alternate output variable even though the string is the same as in outFeatures, anyway.
. . .
result = arcpy.DeleteField_management ( outFeatures,["ht_v_OBJEC", "ht_v_index"] )
output = result[0]
...using ArcGIS Pro 2.5, Any advise ?
Solved! Go to Solution.
It is not enough to create an output parameter in the ModelBuilder interface for your script. This just tells ModelBuilder the script should generate output, and how many parameters and what type, but you still need to explicitly set that output using arcpy.SetParameter() or arcpy.SetParameterAsText(), see the example below. Note that script parameters are called by index number, starting at 0 and upwards. So in your case, I see "outFeatures" as the third parameter, which has index number 2. So you need to set index number 2.
By the way, the script below can both act as a ModelBuilder tool, and be called as function of an imported Python module, by importing the script in another script module, and then calling <YOUR_SCRIPT_NAME>.main().
import arcpy
def main(inputVariable):
# Do something
return <YOUR_SCRIPT_RESULT>
if __name__ == '__main__':
# Get *input* for script
inputVariable = arcpy.GetParameter(0)
# Call main function
returnValue = main(inputVariable)
# Set *output* for script, NOTICE the parameter index number of the parameter before the variable to return.
arcpy.SetParameter(1,returnValue)
It is not enough to create an output parameter in the ModelBuilder interface for your script. This just tells ModelBuilder the script should generate output, and how many parameters and what type, but you still need to explicitly set that output using arcpy.SetParameter() or arcpy.SetParameterAsText(), see the example below. Note that script parameters are called by index number, starting at 0 and upwards. So in your case, I see "outFeatures" as the third parameter, which has index number 2. So you need to set index number 2.
By the way, the script below can both act as a ModelBuilder tool, and be called as function of an imported Python module, by importing the script in another script module, and then calling <YOUR_SCRIPT_NAME>.main().
import arcpy
def main(inputVariable):
# Do something
return <YOUR_SCRIPT_RESULT>
if __name__ == '__main__':
# Get *input* for script
inputVariable = arcpy.GetParameter(0)
# Call main function
returnValue = main(inputVariable)
# Set *output* for script, NOTICE the parameter index number of the parameter before the variable to return.
arcpy.SetParameter(1,returnValue)
Oh, of course! I already get the input with GetParameterAsText(#) functions!
Just add this line: arcpy.SetParameter(2, outFeatures).