I'm trying to write a simple selection tool which works just fine in the Python window in ArcMap but when I create a tool with it, it says that it runs successfully but nothing happens. The script is designed to create a layer file called locations_lyr from a file geodatabase feature class called locations. It then selects entities where Facility_Type = School and refreshes the ArcMap display. The script is as follows:
import arcpy import os from arcpy import env #set workspace Workspace = arcpy.GetParameterAsText(0) env.workspace = r"D:\GIS Data\Selection Test\Temp_OP.gdb" env.overwriteOutput = 1 arcpy.MakeFeatureLayer_management("Locations","locations_lyr") arcpy.SelectLayerByAttribute_management(in_layer_or_view="locations_lyr",selection_type="NEW_SELECTION",where_clause="Facility_Type = 'School'") arcpy.RefreshActiveView()
If I load it in the Python console, it works just fine. I've added it as a tool called SelectSchools in a new toolbox called Selection using the Add Script wizard and that all seems to work just fine. When I run the tool, it says it ran successfully but nothing happens. I've tried adding Print statements at various points in the script but they are not displayed. Any suggestions would be appreciated!
Solved! Go to Solution.
"locations_lyr" is a new layer you are creating in the script. Your script is creating it in memory, but is not adding it to the map.
If you want it added to the map table of contents, you need to:
1. Go into the script tool properties parameters tab, and set up a derived parameter of type Feature Layer.
2. Edit the script to set the parameter value
arcpy.SetParameterAsText(0, "locations_lyr")
No RefreshActiveView should be necessary, the layer will appear the map (if you run the script tool "in process").
UPDATE: For the output to be added to the map Add Outputs To Map must be on. (In ArcMap this is found in Geoprocessing > geoprocessing settings. From the Python window, this is an environment setting.
Using geoprocessing options to control tool execution—Help | ArcGIS for Desktop
You can also turn this on and off in the geoprocessing enviroinment setting addOuyputsToMap
Actually the arcpy.RefreshActiveView() will only have effect if the code has access to the Current dataframe. If the code is run as stand alone script you will not be able to use it. You will have to use the mapping module for this.
"locations_lyr" is a new layer you are creating in the script. Your script is creating it in memory, but is not adding it to the map.
If you want it added to the map table of contents, you need to:
1. Go into the script tool properties parameters tab, and set up a derived parameter of type Feature Layer.
2. Edit the script to set the parameter value
arcpy.SetParameterAsText(0, "locations_lyr")
No RefreshActiveView should be necessary, the layer will appear the map (if you run the script tool "in process").
UPDATE: For the output to be added to the map Add Outputs To Map must be on. (In ArcMap this is found in Geoprocessing > geoprocessing settings. From the Python window, this is an environment setting.
Using geoprocessing options to control tool execution—Help | ArcGIS for Desktop
You can also turn this on and off in the geoprocessing enviroinment setting addOuyputsToMap
Where would you enter this in the script?
You can enter this any time after you've created the feature layer called "locations_lyr".