Estou desenvolvendo um código que quero executar como um serviço da web do ArcGIS Server e como um script independente. Quero poder modificar a execução um pouco, dependendo de estar sendo executada como um serviço da web AGS ou como um python independente / no Desktop.
Existe uma maneira de detectar isso?
Eu fiz algumas pesquisas, mas não encontrei nada muito satisfatório. Eu já vi arcpy.mapping.CreateGISServerConnectionFile, mas isso define conexões com um servidor em vez de verificar o ambiente atual. Também procurei informações sobre como os serviços são executados com AGS (por exemplo, isso ), mas não vejo nada parecido com uma função do tipo arcpy.isWebService (). Eu só preciso verificar o ambiente (gostaria de ver se "% scratchFolder% foi definido ou examinando algo relacionado ao sys.argv)? Parece uma solução instável.
@KHibma e outros me fizeram pensar se eu poderia obter as informações usando o arcpy para verificar a versão. Eu procurei um pouco às cegas e acho que tenho algo, mesmo que não seja o que eu estava esperando. Ainda não verifiquei no AGS.
Produz um bom ditado:
Então eu posso dizer:
Obrigado por chutar isso por aí!
fonte
Assim, você pode verificar o que está instalado. No entanto, isso não o levará muito longe se o DT e o Server estiverem instalados na mesma máquina. Quanto a uma função que diz a você o que você está executando, não existe.
Pensando em voz alta: DT é de 32 bits, o servidor é de 64 bits. Você pode fazer um sys.path e inspecionar qual versão do Python está sendo usada.
ou
Se você souber que está sendo executado como um serviço GP (não apenas usando o python do servidor) vs DT, poderá inspecionar o caminho do arcpy.env.scratchFolder. Em uma instalação típica, sempre será algo como C: \ arcgisserver \ directory \ arcgisjobs \ [service] _gpserver \ [guid] \ ....
fonte
RuntimeManager
é .NET, não um objeto COM.C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll
é uma biblioteca de tipos carregável que possui muitos dos mesmos objetos, você pode usá-la em comtypes.