arcpy가 데스크톱 또는 서버에서 실행 중인지 감지 할 수 있습니까?


9

ArcGIS Server 웹 서비스 및 독립 실행 형 스크립트로 실행하려는 코드를 개발 중입니다. AGS 웹 서비스 또는 독립 실행 형 파이썬 / 데스크탑 내에서 실행 중인지에 따라 실행을 약간 수정할 수 있기를 원합니다.

이것을 감지하는 방법이 있습니까?

몇 가지 검색을 수행했지만 매우 만족스러운 것을 찾지 못했습니다. 내가 본 arcpy.mapping.CreateGISServerConnectionFile을 하지만 서버에이 세트의 연결은 현재 환경을 확인 반대로. 또한 서비스가 AGS에서 실행되는 방법에 대한 정보를 찾았습니다 (예 : this ).하지만 arcpy.isWebService () 유형의 함수 라인을 따라 아무것도 보이지 않습니다. 환경을 확인해야합니까 ( "% scratchFolder %가 설정되었거나 sys.argv와 관련된 것을 검사하고 있는지 확인") 불안정한 해결책으로 보입니다.

답변:


5

sys. executable, arcpy.GetInstallInfo (), ListInstallations () 및 ProductInfo ()의 결과를 살펴본 후이를 제안했지만 어느 arcpy를 실행하고 있는지에 대한 좋은 대답을 얻지 못했습니다. @KHibma, arcpy 팀이 생각해야 할 것-sys.version과 같은 멋진 속성 (arcpy.version)입니다.

>>> import arcpy
>>> arcpy.__file__
'C:\\ArcGIS\\Desktop10.1\\arcpy\\arcpy\\__init__.py'

이 테스트를 함수로 캐스팅했습니다. 파이썬 비트를 알아야한다면 "32 비트"를 포함하는 sys.version을 테스트하는 것이 가장 좋다고 생각합니다. ArcGIS 버전을 파는 것은 조금 더 코드이므로 계속 진행하여 함수에 포함 시켰습니다.

# report arcpy platform and version
# author: Curtis Price, cprice@usgs.gov
# date: 2014/08/09 (update to support ArcGIS Pro)

def ArcPyVersion():
    """Report ArcPy version

    example

    >>> ArcPyVersion()
    'Desktop 10.1.3143'
    """
    import arcpy
    f = arcpy.__file__
    if f.find("Desktop") > 0:
      v = "Desktop" 
    elif f.lower().find("arcgis pro") > 0:
      v = "ArcGISPro"
    else:
      v = "Server"
    i = arcpy.GetInstallInfo()
    v = "{0} {1}.{2}".format(
            v, i["Version"], i["BuildNumber"])
    return v 

1
따라서 arcpy .__ file__, arcpy.GetInstallInfo () 및 arcpy.ProductInfo ()는 모두 비슷한 정보를 생성합니다 (하나는 "데스크톱"을 생성하고 다른 하나는 "ArcInfo"를 생성하더라도). arcpy.ProductInfo () 옵션이 가장 간결하고 읽기 쉬운 옵션이라고 생각합니다.
Roland

테스트하지는 않았지만 "info arceditor"와 같이 특별히 가져 오지 않은 경우 productinfo에서 사용 가능한 최고 라이센스 수준을 제공 할 수 있습니다). ArcEditor 만 사용할 수 있다면 다시 얻을 수 있습니다. 서버가 여러 라이센스 수준 (기본, 표준, 엔터프라이즈)도 지원하기 때문에 서버가 동일한 작업을 수행하지 않는다는 점이
Curtis Price

이 Python 코드는 소프트웨어가 일반적인 폴더 명명 규칙을 사용하여 설치되었다고 가정합니다. 경로를 이동할 수있는 경우 기본 폴더 이름 "Desktop10.1"evn을 사용하지 않는 경우는 거의 없습니다 (예 : "C : \ ArcGIS \ Desktop10.1"에 설치
Curtis Price

8

@KHibma와 다른 사람들은 arcpy를 사용하여 버전을 확인하여 정보를 얻을 수 있는지 궁금해했습니다. 나는 약간 맹목적으로 파고 있었고, 내가 기대했던 것이 아니더라도 무언가를 가지고 있다고 생각합니다. 아직 AGS에서 확인하지 않았습니다.

그것은 좋은 받아쓰기를 생성합니다 :

>>> d=arcpy.GetInstallInfo()
>>> d

{'BuildNumber': u'2414',
 'InstallDate': u'5/16/2012',
 'InstallDir': u'C:\\ArcGIS\\Desktop10.0\\',
 'InstallTime': u'16:32:14',
 'InstallType': u'N/A',
 'Installer': u'abock',
 'ProductName': u'desktop',
 'SPBuild': u'10.0.4.4000',
 'SPNumber': u'4',
 'SourceDir': u'\\\\igskahhwvsawesm\\arcgis_10\\Desktop\\Desktop\\',
 'Version': u'10.0'}

그래서 나는 말할 수 있습니다 :

if d['ProductName'] == u'desktop':
    ...
else:
    ....

주변을 걷어 주셔서 감사합니다!


방금 이것이 10.1에서 "데스크톱"으로 돌아 왔으므로 if 문이 d [ 'ProductName']. lower ()를 사용하는 것이 좋습니다.
Roland

서버에 결과를 게시 할 수 있습니까? 나중에 참조 할 때 유용 할 수 있습니다.
Petr Krebs 2016 년

명확히. 지연 돼서 죄송합니다. AGS 설치를 수행하는 동료를 방문해야했습니다. 10.1에서 그는 "서버"를 얻었다. 우리는 10.0 AGS 인스턴스가 없지만 어떤 종류의 대문자 기능을 통해 결과를 실행하는 것이 좋습니다.
Roland

arcpy.GetInstallInfo ()를 잊어 버렸습니다. 목적은 무엇을 실행하고 있는지 알려주는 것이 아니지만 (ListInstallations와 거의 동일하게 작동합니다 ... 32 비트에서 실행될 때 엔진 | 데스크톱을 반환하고 64 비트 파이썬에서 실행할 때 서버 만 반환한다고 생각합니다. 메시지에 표시된 것처럼 10.0으로 되돌아 가면 서버와 데스크톱을 모두 결정할 수 있습니다.
KHibma

2
@Roland는 동료와 대화 한 후 몇 가지 더 테스트했습니다. 같은 기계에 DT / AGS가 10.0이 없으므로 어떻게 될지 모르겠지만 "arcpy.ProductInfo ()"를 사용해보십시오. 그것은 당신에게 ArcINFO 또는 ArcSERVER를 알려줍니다 ... DT에서 실행 중이거나 스크립트를 GP 서비스로 10.0과 10.1에서 실행하면 실제로 당신을 위해 그것을 할 수 있습니다
KHibma

1
arcpy.ListInstallations()
[u'desktop', u'engine', u'server']

설치된 것을 확인할 수 있습니다. 그러나 DT와 서버가 모두 동일한 시스템에 설치되어 있으면 크게 멀지 않습니다. 실행중인 것을 알려주는 기능은 존재하지 않습니다.

크게 생각하기 : DT는 32 비트, 서버는 64 비트입니다. sys.path를 수행하고 사용중인 Python 버전을 검사 할 수 있습니다.

또는

서버의 파이썬을 사용하지 않고 GP 서비스로 실행하는 것과 DT를 알고 있다면 arcpy.env.scratchFolder의 경로를 검사 할 수 있습니다. 일반적인 설치에서는 항상 C : \ arcgisserver \ directories \ arcgisjobs \ [service] _gpserver \ [guid] \ ....와 같은 모양입니다.


ArcGIS Desktop 10.1에는 Python 64 비트를 설치하는 64 비트 백그라운드 지오 프로세싱을 설치하는 옵션이 있습니다.
MLowry


2
RuntimeManagerCOM 개체가 아닌 .NET입니다.
Petr Krebs 2016 년

C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll동일한 객체가 많이있는로드 가능한 유형 라이브러리입니다. comtypes에서 사용할 수 있습니다.
Jason Scheirer 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.