Powszechnym wzorcem kodowania stosowanym w AML było uruchamianie AML (z parametrami) wewnątrz innej AML.
Aplikacja, którą obecnie tworzę, skorzystałaby na możliwości uruchomienia skryptu Python (z parametrami) w innym skrypcie Python.
Nie wydaje się to jednak wcale proste.
Korzystając z ArcGIS 10, eksperymentuję z opakowaniem „wewnętrznego” skryptu Python w narzędzie ArcGIS, które ma parametry. Pomyślałem, że prostą sprawą jest, aby „zewnętrzny” skrypt Pythona używał arcpy.ImportToolbox do importowania zestawu narzędzi, a następnie uruchamiania w nim narzędzi. Jednak podczas testowania do tej pory wszystkie moje próby uruchomienia narzędzia „wewnętrznego” ze skryptu „zewnętrznego” wydają się po prostu pomijać narzędzie „wewnętrzne” (nie pojawia się żaden błąd).
Oto kod testowy, aby lepiej zilustrować to, co próbuję opisać.
Mój skrypt testinner.py to:
inputString = arcpy.GetParameterAsText(0)
newFC = "C:\\Temp\\test.gdb\\" + inputString
arcpy.Copy_management("C:\\Temp\\test.gdb\\test",newFC)
Mój skrypt testouter.py to:
import arcpy
inputString1 = arcpy.GetParameterAsText(0)
inputString2 = arcpy.GetParameterAsText(1)
arcpy.ImportToolbox("C:\\Temp\\test.tbx")
arcpy.testinner_test(inputString1)
arcpy.testinner_test(inputString2)
Do testinner.py jego narzędzie potrzebuje pojedynczego parametru String.
Do testouter.py jego narzędzie potrzebuje dwóch parametrów String
Oba narzędzia są umieszczone w pliku test.tbx.
Test.gdb potrzebuje tylko jednej pustej klasy funkcji o nazwie test.
Po skompletowaniu powyższego uruchomienia narzędzia testinner z przekazanym ciągiem takim jak „abc”, ponieważ jego parametr powinien spowodować skopiowanie klasy funkcji „test” do pliku o nazwie „abc” OK.
Ale gdy spróbujesz uruchomić narzędzie testouter z dwoma ciągami, takimi jak „uvw” i „xyz” jako parametrami, narzędzie testinner w testouter.py wydaje się działać raz, ale wysyła ArcMap 10 SP2 na Vista SP2 do poważnego błędu aplikacji, gdy próbuję użyć go po raz drugi.
Ten sam test z użyciem Windows XP SP3 i ArcGIS Desktop 10 SP2 również powoduje poważny błąd aplikacji w tym samym punkcie.