AML'de kullanılan ortak bir kodlama modeli, bir AML'yi (parametreleriyle birlikte) başka bir AML'nin içinde çalıştırmaktı.
Geliştirmekte olduğum bir uygulama, başka bir Python betiği içinde bir Python betiği (parametreleri ile) çalıştırabilmekten fayda sağlayacaktır.
Ancak, bu hiç de basit görünmüyor.
ArcGIS 10 kullanarak, "inner" Python betiğini, parametreleri içeren bir ArcGIS aracına sarmayı deniyorum. "Dış" Python betiğinin araç kutusunu içe aktarmak ve içindeki araçları çalıştırmak için arcpy.ImportToolbox kullanmasının basit bir mesele olacağını düşündüm. Bununla birlikte, bugüne kadar yapılan testlerde, "iç" aracını "dış" komut dosyasından çalıştırma girişimlerimin tümü "iç" aracını atlıyor gibi görünüyor (hata atılmıyor).
Anlatmaya çalıştığım şeyi daha iyi denemek ve göstermek için bazı test kodları.
Testinner.py betiğim:
inputString = arcpy.GetParameterAsText(0)
newFC = "C:\\Temp\\test.gdb\\" + inputString
arcpy.Copy_management("C:\\Temp\\test.gdb\\test",newFC)
Testouter.py betiğim:
import arcpy
inputString1 = arcpy.GetParameterAsText(0)
inputString2 = arcpy.GetParameterAsText(1)
arcpy.ImportToolbox("C:\\Temp\\test.tbx")
arcpy.testinner_test(inputString1)
arcpy.testinner_test(inputString2)
Testinner.py için aracı tek bir String parametresine ihtiyaç duyar.
Testouter.py için aracı iki String parametresine ihtiyaç duyar
İki araç bir test.tbx dosyasına yerleştirilir.
Test.gdb sadece test adı verilen boş bir özellik sınıfına ihtiyaç duyar.
Yukarıdakileri topladıktan sonra, testinner aracını 'abc' gibi bir dizeyle çalıştırmak, parametre olarak 'test' özellik sınıfının 'abc' OK adlı birine kopyalanmasıyla sonuçlanmalıdır.
Ancak, test aracını parametresi olarak 'uvw' ve 'xyz' gibi iki dizeyle çalıştırmayı denediğinizde, testouter.py içindeki testinner aracı bir kez tamam çalışıyor gibi görünüyor, ancak Vista SP2'deki ArcMap 10 SP2'yi ciddi bir Uygulama Hatası'na gönderdiğinde ikinci kez kullanmaya çalışıyorum.
Windows XP SP3 ve ArcGIS Desktop 10 SP2'yi kullanan aynı test, aynı noktada Ciddi bir Uygulama Hatası da veriyor.