ArcPy 스크립트를 디버깅 하시겠습니까?


50

ArcGIS 10에서 ArcPy를 사용하여 많은 Python 스크립트를 작성했으며 지금까지 디버깅 방법은을 사용하여 지리 처리 결과 창에 메시지를 인쇄하는 것으로 제한되어 있습니다 arcpy.AddMessage().

중단 점 설정과 같은 다른 옵션이 있습니까?

Jason의 방법은 훌륭합니다. 유효성 검사와 같은 도구 상자에 버그가있는 경우 도구 상자가 인코딩되므로 IDE에서 문제를 정확하게 파악할 수 없습니다. 적어도 WING은 그것을 정확히 지적하지 못했습니다.


여기에 옵션이 있습니까? 코드 구글 pyscripter
브래드 Nesom

는 ArcGIS 도움말 를 PythonWin에 디버거를 사용하는 방법에 대해 설명합니다
레이건 Sarwas

OS 파일 속성에서 .py 파일의 기본 프로그램을 PyScripter로 설정해 보셨습니까?
KiloGeo

이렇게하면 OS에 파이썬 스크립트를 실행하고 싶지 않다고 편집기에 열어서 알려주는 것이 효과적이지 않습니까?
RyanDalton

네 맞습니다. 당신의 목적을 잘못 이해해서 죄송합니다.
KiloGeo

답변:


37

일반적으로 Python 디버거 / IDE는 Python 스크립트가 자체와 동일한 프로세스에서 실행되고 있다고 가정하므로 ArcMap.exe에서 실행되는 스크립트를 디버깅하는 것은 적절합니다. 로 디버그하십시오.

지난 몇 년 동안 나에게 매우 효과적 인 방법은 도구를 호출하고 Python IDE (Wing 또는 Pythonwin)의 기본 스크립트로 사용하는 간단한 스크립트를 작성하고 도구의 .py에 중단 점을 설정하는 것입니다. 파일도 같은 IDE 세션에서 열립니다.

그래서 기본적으로 나는 이것을한다 :

  1. 스크립트 도구에서 작동하지 않는 입력 세트 가져 오기
  2. 도구를 호출하는 .tbx와 동일한 폴더에서 간단한 .py 파일을여십시오.
  3. IDE에서 호출자 스크립트 및 스크립트 도구 .py 파일을여십시오.
  4. 스크립트 도구 파일에서 중단 점 설정
  5. 발신자 스크립트 실행

그리고 내 발신자 스크립트는 일반적으로 매우 간단합니다.

import os
import arcpy
arcpy.ImportToolbox(os.path.join(os.path.dirname(__file__), 'my.tbx'))
arcpy.MyToolThatIsFailing_myalias("inputs", "that", "don't" "work")

ArcMap에서 실행되는 스크립트를 디버깅하기 위해 winpdb 를 시도했지만 운이 없었습니다. 당신이 그것을 시도하고 그것을 잘 작동 얻을 경우, 결과를 공유하십시오.


1
좋은 해결책! 나는 그것을 시도합니다.
George Silva

과거에는 winpdb를 성공적으로 사용하여 장기 프로세스 스크립트를 디버깅했습니다. winpdb를 설정하면 현재 실행중인 독립 실행 형 스크립트 또는 이론적으로 ArcMap과 같은 다른 프로세스 내의 스크립트로 "점프"하여 정상적으로 디버깅 할 수 있습니다. 완료하는 데 몇 주가 걸리는 스크립트를 체크인하는 데 매우 편리했습니다. 그래도 ArcGIS 응용 프로그램 프로세스에서 arcpy 디버깅을 시도하지 않았습니다.
blah238

PyCharm을 추천합니다. 그것은 마술처럼 작동합니다
user39901230

26

GP 옵션 대화 상자에서 편집기 / 디버거에 대해 선택한 실행 파일을 가리켜 서 변경할 수 있습니다.

GP 설정 대화 상자


이것은 ArcGIS 10의 새로운 향상으로 보입니다. 맞습니까? 9.3에 대한이 설정 옵션이 표시되지 않습니다.
RyanDalton

맞습니다. 10의 새로운 기능입니다.
Jason Scheirer

9

10의 사용자에게는 분명히 가장 좋은 경로는 Jason의 게시물입니다. 9.3 사용자의 경우 Brad 게시물에 링크 된 ESRI KB 지원 지침 을 따라 작동하도록 할 수있었습니다.

궁극적으로 Pyscripter에서 ArcGIS python 스크립트의 기본 편집을 얻는 열쇠는 * .py 파일로 끝나는 "등록 된 파일 형식"에 대한 시스템 "작업"을 편집하는 것입니다 (4 단계). 새 "편집"작업 유형을 만든 다음 Pyscripter.exe 경로를 포함 시켰습니다. 이 작업을 수행 한 후 기본 편집 작업은 IDLE 대신 Pyscripter를 시작하도록 설정되었습니다.

내가 사용한 문자열 (아래 표시된 대화 상자에서 잘 렸기 때문에)은 다음과 같습니다.

"C:\Program Files\PyScripter\PyScripter.exe" "%1"

여기에 이미지 설명을 입력하십시오


1
답을 위해 +1하고, 가능하다면 이미지뿐만 아니라 문자열을 포함하여 (텍스트를 복사하여 붙여 넣기가 훨씬 쉽습니다!)
매트 윌키

7

이 방법이 arcpy와 어떻게 작동하는지 모르겠지만 pdb 시도해 볼 수 있습니다 .

import pdb; pdb.set_trace()

이클립스가있는 pydev의 비슷한 기능이 있습니다. 여기에 설명되어 있습니다. 신호를 수신하도록 이클립스를 설정하면 pydevd.settrace () 함수 호출로 이클립스 외부에서 실행되는 코드에서이를 트리거 할 수 있습니다. urbansim.org/Documentation/DebuggingWithEclipse
ako

0

내 코드를 디버깅하는 가장 직접적인 방법은 입력을 기존 데이터 세트의 파일 경로에 하드 코딩하는 것입니다. 예를 들면 다음과 같습니다.

import arcpy

# parameters for script
#input1 = arcpy.GetParameterAsText(0) # layer
#input2 = arcpy.GetParameterAsText(1) # folder

# debugging parameters
input1 = r"path/to/your/data.shp"
input2 = r"path/to/your/folder"

결과 창 외에도 파이썬 창은 유용한 오류 메시지를 생성하거나 코드 스 니펫을 테스트 할 수 있습니다.

좋은 IDE에는 메모리에 모든 현재 처리 지점까지 처리 할 수있는 디버그 프로브가 있습니다. 이를 통해 데이터가 어떻게 진행되고 있는지 확인할 수 있습니다. 스크립트를 일시 중지하려는 중단 점을 설정하십시오. 특정 반복에서 루프를 중지하려면 조건부 중단 점을 사용하십시오. 또한 Arc 버전과 해당 버전에서 어떤 기능을 사용할 수 있는지 알고 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.