Ich entwickle Code, den ich sowohl als ArcGIS Server-Webdienst als auch als eigenständiges Skript ausführen möchte. Ich möchte in der Lage sein, die Ausführung geringfügig zu ändern, je nachdem, ob sie als AGS-Webdienst oder als eigenständige Python / innerhalb von Desktop ausgeführt wird.
Gibt es eine Möglichkeit, dies zu erkennen?
Ich habe etwas gesucht, aber nichts sehr zufriedenstellendes gefunden. Ich habe arcpy.mapping.CreateGISServerConnectionFile gesehen , aber dadurch werden Verbindungen zu einem Server hergestellt, anstatt die aktuelle Umgebung zu überprüfen. Ich habe auch nach Informationen darüber gesucht, wie Dienste mit AGS ausgeführt werden (z. B. dies ), aber ich sehe nicht wirklich etwas in der Art einer Funktion vom Typ arcpy.isWebService (). Muss ich nur die Umgebung überprüfen (um festzustellen, ob "% ScratchFolder% festgelegt wurde oder etwas im Zusammenhang mit sys.argv untersucht wurde)? Scheint eine instabile Lösung zu sein.
@KHibma und andere haben mich gefragt, ob ich die Informationen erhalten könnte, indem ich arcpy verwende, um die Version zu überprüfen. Ich habe mich etwas blind herumgetrieben und ich glaube, ich habe etwas, auch wenn es nicht das ist, was ich erwartet hatte. Ich habe noch nicht unter AGS nachgesehen.
Es ergibt sich ein schönes Diktat:
Also kann ich sagen:
Danke, dass du das herumgetreten hast!
quelle
So können Sie überprüfen, was installiert ist. Dies bringt Sie jedoch nicht sehr weit, wenn sowohl DT als auch Server auf demselben Computer installiert sind. Eine Funktion, die Ihnen sagt, unter was Sie ausgeführt werden, ist nicht vorhanden.
Laut denken: DT ist 32bit, Server ist 64bit. Sie können einen sys.path erstellen und überprüfen, welche Version von Python verwendet wird.
oder
Wenn Sie wissen, dass es entweder als GP-Dienst (nicht nur mit Python des Servers) oder als DT ausgeführt wird, können Sie den Pfad von arcpy.env.scratchFolder überprüfen. Bei einer typischen Installation sieht es immer so aus wie C: \ arcgisserver \ directory \ arcgisjobs \ [service] _gpserver \ [guid] \ ....
quelle
RuntimeManager
ist .NET, kein COM-Objekt.C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll
ist eine ladbare Typbibliothek, die viele der gleichen Objekte enthält. Sie können diese von comtypes verwenden.