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.