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.