Một mẫu mã hóa phổ biến được sử dụng trong AML là để chạy AML (có tham số) bên trong AML khác.
Một ứng dụng mà tôi hiện đang phát triển sẽ được hưởng lợi từ việc có thể chạy tập lệnh Python (có tham số) trong tập lệnh Python khác.
Tuy nhiên, điều này dường như không hoàn toàn đơn giản.
Sử dụng ArcGIS 10, tôi đang thử nghiệm gói script Python "bên trong" vào một công cụ ArcGIS có các tham số. Tôi nghĩ sẽ là một vấn đề đơn giản khi có tập lệnh Python "bên ngoài" sử dụng arcpy.ImportToolbox để nhập hộp công cụ và sau đó chạy (các) công cụ bên trong nó. Tuy nhiên, trong thử nghiệm cho đến nay, tất cả các nỗ lực của tôi để chạy công cụ "bên trong" từ tập lệnh "bên ngoài" dường như chỉ đơn giản là bỏ qua công cụ "bên trong" (không có lỗi nào được đưa ra).
Dưới đây là một số mã kiểm tra để thử và minh họa rõ hơn những gì tôi đang cố gắng mô tả.
Kịch bản testinner.py của tôi là:
inputString = arcpy.GetParameterAsText(0)
newFC = "C:\\Temp\\test.gdb\\" + inputString
arcpy.Copy_management("C:\\Temp\\test.gdb\\test",newFC)
Kịch bản testouter.py của tôi là:
import arcpy
inputString1 = arcpy.GetParameterAsText(0)
inputString2 = arcpy.GetParameterAsText(1)
arcpy.ImportToolbox("C:\\Temp\\test.tbx")
arcpy.testinner_test(inputString1)
arcpy.testinner_test(inputString2)
Đối với testinner.py công cụ của nó cần một tham số Chuỗi duy nhất.
Đối với testouter.py công cụ của nó cần hai tham số Chuỗi
Hai công cụ được đặt trong test.tbx.
Test.gdb chỉ cần một lớp tính năng trống duy nhất được gọi là test.
Khi bạn đã lắp ráp xong, việc chạy công cụ testinner với một chuỗi như 'abc' được truyền vào làm tham số của nó sẽ dẫn đến lớp tính năng 'test' được sao chép sang một cái gọi là 'abc' OK.
Nhưng khi bạn thử chạy công cụ testouter với hai chuỗi như 'uvw' và 'xyz' làm tham số của nó, công cụ testinner trong testouter.py dường như chạy OK một lần, nhưng gửi ArcMap 10 SP2 trên Vista SP2 đến Lỗi ứng dụng nghiêm trọng khi cố gắng sử dụng nó lần thứ hai
Thử nghiệm tương tự sử dụng Windows XP SP3 và ArcGIS Desktop 10 SP2 cũng tạo ra Lỗi ứng dụng nghiêm trọng tại cùng một điểm.