This is my script where I am trying to use selectby_attribute
within a model, based on a field, F*. There are 6 fields, so I want 6 derived layers. Then I am going to use bearing and distance tool on each of these output layers. I cannot pass query to the model. How do I call a script from my 1st model, then call a model from this script?
import arcpy, sys, string, os
#arcpy.env.workspace = arcpy.GetParameterAsText(0)
in_FC = arcpy.GetParameterAsText(0)
#FList = arcpy.GetparameterAsText(1)
#F_list = FList.split(";")
#arcpy.ListFields(in_FC, "Rev_2016_F*")
#arcpy.AddMessage(tableName)
arcpy.AddMessage("The table %s exists" % (in_FC))
CurrentWorkspace = r"D:\Fort_Belvoir\Conservation\Conservation.gdb"
#in_Table = "D:\Fort_Belvoir\Conservation\Conservation.gdb\QryTab4_CopyRows"
#tbx = arcpy.AddToolbox("C:/Temp/MyToolbox.tbx")
tbx = arcpy.AddToolbox(r"D:\Fort_Belvoir\Conservation\PIF.tbx")
#arcpy.AddMessage("this is toolbox %s" % (tbx))
# Get a list of field objects
#
num = 0
fields = arcpy.ListFields(in_FC, "Rev_2016_F*", "LONG")
for field in fields:
# Check the field name, perform a calculation when finding the field 'Flag'
#
# Local variables
anum = str(num)
thetab = "F" + anum
arcpy.AddMessage(thetab)
#arcpy.SetParameter(1, SR)
theFld = field.name
arcpy.AddMessage(field.name)
arcpy.AddMessage(theFld)
arcpy.AddMessage(str(num))
anum = str(num)
arcpy.AddMessage(anum)
thetab = "F" + anum
arcpy.AddMessage(thetab)
out_FC = r"D:\Fort_Belvoir\Conservation\Conservation.gdb\PIF" + os.sep + thetab
try:
arcpy.AddMessage(out_FC)
arcpy.SetParameter(1, theFld)
arcpy.SetParameter(2, out_FC)
tbx.Model2_Toolbox(theFld, out_FC)
except:
arcpy.AddMessage("Failed")
arcpy.AddMessage(out_FC)
num = num + 1
1 Answer 1
As @PolyGeo told:
I suggest you look at ImportToolbox rather than AddToolbox. However, I suspect using a single Python Script tool may be simpler than mixing ArcPy and ModelBuilder any more than necessary.
I think it is better not to mix models with arcpy scripts, however I also used to do it. Assuming you have a local toolbox with models and scripts inside. First step is to import toolbox.
arcpy.ImportToolbox(toolbox_path)
And then everything inside toolbox become callable with arcpy. I.e. if you had a model called 'Calculate_distances' with input parameters 'feature_path' and 'out_path' you can type then:
arcpy.Calculate_distances(r'path_to_fc', r'path_out')
Be patient to call the the exactly model/script name, not its alias which is in toolbox.