Tworzę kod, który chcę uruchomić zarówno jako usługę internetową ArcGIS Server, jak i jako samodzielny skrypt. Chcę móc nieco zmodyfikować wykonanie w zależności od tego, czy działa jako usługa sieciowa AGS, czy jako samodzielny python / na pulpicie.
Czy istnieje sposób na wykrycie tego?
Przeszukałem trochę, ale nie znalazłem nic zadowalającego. Widziałem arcpy.mapping.CreateGISServerConnectionFile, ale ustawia to połączenia z serwerem w przeciwieństwie do sprawdzania bieżącego środowiska. Szukałem również informacji o tym, jak usługi są uruchamiane z AGS (np. To ), ale tak naprawdę nie widzę nic podobnego do funkcji typu arcpy.isWebService (). Czy muszę tylko sprawdzać środowisko (na przykład sprawdzić, czy ustawiono „% scratchFolder% lub badać coś związanego z sys.argv)? Wydaje się to niestabilnym rozwiązaniem.
@KHibma i inni sprawili, że zastanawiałem się, czy mogę uzyskać informacje, używając arcpy do sprawdzenia wersji. Kopałem trochę na ślepo i myślę, że coś mam, nawet jeśli nie tego się spodziewałem. Nie sprawdziłem jeszcze w AGS.
Daje ładny dykt:
Mogę więc powiedzieć:
Dzięki, że to skopałeś!
źródło
Możesz więc sprawdzić, co jest zainstalowane. To jednak nie zajdzie daleko, jeśli zarówno DT, jak i Serwer są zainstalowane na tym samym komputerze. Jeśli chodzi o funkcję, która mówi ci, pod czym pracujesz, nie, nie istnieje.
Myślenie na głos: DT to 32 bity, serwer to 64 bity. Możesz zrobić sys.path i sprawdzić, która wersja Pythona jest używana.
lub
Jeśli wiesz, że albo działa jako usługa GP (nie tylko przy użyciu Pythona serwera) w porównaniu z ID, możesz sprawdzić ścieżkę pliku arcpy.env.scratchFolder. Podczas typowej instalacji zawsze będzie wyglądał jak C: \ arcgisserver \ directories \ arcgisjobs \ [service] _gpserver \ [guid] \ ....
źródło
RuntimeManager
to .NET, a nie obiekt COM.C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll
jest biblioteką typów do załadowania, która ma wiele takich samych obiektów, możesz użyć jej z typów komputerów.