Je développe du code que je souhaite exécuter à la fois en tant que service Web ArcGIS Server et en tant que script autonome. Je veux pouvoir modifier légèrement l'exécution selon qu'elle s'exécute en tant que service Web AGS ou en tant que python autonome / dans Desktop.
Existe-t-il un moyen de détecter cela?
J'ai fait quelques recherches mais je n'ai rien trouvé de très satisfaisant. J'ai vu arcpy.mapping.CreateGISServerConnectionFile, mais cela définit les connexions à un serveur au lieu de vérifier l'environnement actuel. J'ai également cherché des informations sur la façon dont les services sont exécutés avec AGS (par exemple, ceci ), mais je ne vois vraiment rien dans le sens d'une fonction de type arcpy.isWebService (). Ai-je juste besoin de vérifier l'environnement (comme pour voir si "% scratchFolder% a été défini ou examiner quelque chose lié à sys.argv)? Semble une sorte de solution instable.
@KHibma et d'autres m'ont fait me demander si je pourrais obtenir les informations en utilisant arcpy pour vérifier la version. J'ai creusé un peu aveuglément et je pense que j'ai quelque chose même si ce n'est pas ce que j'attendais. Je n'ai pas encore vérifié sous AGS.
Il produit un joli dict:
Je peux donc dire:
Merci d'avoir lancé ça!
la source
Vous pouvez donc vérifier ce qui est installé. Cela ne vous mènera cependant pas très loin si DT et le serveur sont installés sur la même machine. Quant à une fonction qui vous indique sous quoi vous exécutez, non, n'existe pas.
Penser à haute voix: DT est 32 bits, le serveur est 64 bits. Vous pouvez faire un sys.path et inspecter la version de Python utilisée.
ou
Si vous savez qu'il fonctionne en tant que service GP (et pas seulement en utilisant le python du serveur) vs DT, vous pouvez inspecter le chemin de arcpy.env.scratchFolder. Sur une installation typique, il ressemblera toujours à quelque chose comme C: \ arcgisserver \ répertoires \ arcgisjobs \ [service] _gpserver \ [guid] \ ....
la source
RuntimeManager
est .NET, pas un objet COM.C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll
est une bibliothèque de types chargeable qui a plusieurs des mêmes objets, vous pouvez l'utiliser à partir de types de com.