Gỡ lỗi các tập lệnh ArcPy?


50

Tôi đã viết nhiều tập lệnh Python bằng ArcPy trong ArcGIS 10 và cho đến nay phương tiện gỡ lỗi duy nhất của tôi bị hạn chế in thông báo đến cửa sổ kết quả xử lý địa lý bằng cách sử dụng arcpy.AddMessage().

Có bất kỳ tùy chọn khác ngoài đó, chẳng hạn như thiết lập các điểm dừng?

Phương pháp của Jason hoạt động rất tốt. Nếu bạn có một lỗi trong hộp công cụ của mình, chẳng hạn như xác nhận, IDE của bạn có thể sẽ không thể xác định được vấn đề vì các hộp công cụ được mã hóa. Ít nhất WING không thể xác định chính xác nó.


Có lẽ một lựa chọn ở đây? mã google pyscripter
Brad Nesom

Trợ giúp ArcGIS thảo luận về cách sử dụng trình gỡ lỗi trong
PythonWin

Trong thuộc tính tệp hệ điều hành, bạn đã thử đặt chương trình mặc định cho tệp .py thành PyScripter chưa?
KiloGeo

Bằng cách này, tôi sẽ không nói với HĐH một cách hiệu quả rằng tôi không muốn chạy tập lệnh python của mình, mà chỉ mở nó trong trình chỉnh sửa?
RyanDalton

Vâng chính xác. Xin lỗi tôi đã hiểu nhầm mục đích của bạn.
KiloGeo

Câu trả lời:


37

Thông thường các trình gỡ lỗi / IDE của Python cho rằng tập lệnh Python đang chạy trong cùng một quy trình như vậy, vì vậy việc gỡ lỗi một tập lệnh đang chạy trong ArcMap.exe là đúng - bạn cần có đủ môi trường tập lệnh GP được khởi động trong tập lệnh Python như bạn có thể gỡ lỗi với.

Một phương pháp hoạt động rất tốt đối với tôi trong vài năm qua là viết một tập lệnh đơn giản chỉ cần gọi công cụ và sử dụng nó làm tập lệnh chính của tôi trong Python IDE (Wing hoặc Pythonwin) và đặt các điểm dừng của tôi trong công cụ .py tập tin cũng mở trong cùng một phiên IDE.

Vì vậy, về cơ bản tôi làm điều này:

  1. Nhận tập hợp các đầu vào không hoạt động trong công cụ tập lệnh của tôi
  2. Mở tệp .py đơn giản trong cùng thư mục với .tbx gọi công cụ
  3. Mở tập lệnh người gọi và tập tin .py công cụ tập lệnh trong IDE
  4. Đặt điểm dừng trong tệp công cụ tập lệnh
  5. Chạy kịch bản người gọi

Và kịch bản người gọi của tôi thường khá đơn giản:

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

Tôi đã thử dùng winpdb để gỡ lỗi các tập lệnh đang chạy trong ArcMap nhưng tôi chưa bao giờ gặp may mắn. Nếu bạn muốn dùng thử và bạn làm cho nó hoạt động tốt, vui lòng chia sẻ những phát hiện của bạn.


1
giải pháp tốt đẹp! Tôi sẽ thử nó.
George Silva

Tôi đã sử dụng winpdb thành công trong quá khứ để gỡ lỗi các tập lệnh xử lý dài. winpdb, một khi được thiết lập cho phép bạn "nhảy vào" một tập lệnh độc lập hiện đang chạy hoặc theo lý thuyết trong một quy trình khác như ArcMap và gỡ lỗi nó một cách bình thường. Điều này rất thuận tiện để kiểm tra một kịch bản sẽ mất vài tuần để hoàn thành. Mặc dù vậy, tôi chưa thử gỡ lỗi Arcpy trong quy trình ứng dụng ArcGIS.
blah238

Tôi muốn giới thiệu PyCharm. nó hoạt động như ma thuật
user39901230

26

Bạn có thể thay đổi nó từ hộp thoại tùy chọn GP, ​​chỉ cần trỏ đến lựa chọn thực thi của bạn cho trình soạn thảo / trình gỡ lỗi.

Hộp thoại Cài đặt GP


Đây có vẻ là một cải tiến mới cho ArcGIS 10, đúng không? Tôi không thấy tùy chọn cài đặt này cho 9.3.
RyanDalton

Đúng, mới trong 10.
Jason Scheirer

9

Đối với người dùng 10 người, rõ ràng con đường tốt nhất để đi là với bài đăng của Jason, mà tôi đã đánh dấu là "câu trả lời hay nhất". Đối với người dùng 9.3, tôi có thể làm theo các hướng dẫn Hỗ trợ KB ESRI được liên kết trong bài đăng của Brad để làm cho nó hoạt động.

Cuối cùng, chìa khóa để có được chỉnh sửa mặc định các tập lệnh python ArcGIS trong Pyscripter là chỉnh sửa "hành động" của hệ thống cho "các loại tệp đã đăng ký" kết thúc bằng các tệp * .py (bước # 4). Tôi đã tạo một loại hành động "Chỉnh sửa" mới và sau đó bao gồm đường dẫn Pyscripter.exe. Khi tôi đã làm điều này, hành động chỉnh sửa mặc định là thiết lập để khởi chạy Pyscripter thay vì IDLE.

Chuỗi tôi đã sử dụng (vì nó đã bị cắt trong hộp thoại hiển thị bên dưới) là:

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

nhập mô tả hình ảnh ở đây


1
+1 cho câu trả lời, và một lần nữa, nếu tôi có thể, bao gồm cả chuỗi và không chỉ là một hình ảnh (văn bản sẽ dễ dàng hơn nhiều để sao chép và dán!).
matt wilkie

7

Tôi không biết làm thế nào điều này sẽ làm việc với arcpy, nhưng bạn có thể thử pdb :

import pdb; pdb.set_trace()

có một chức năng tương tự cho pydev với nhật thực, được mô tả ở đây. Bạn đặt nhật thực để nghe tín hiệu và bạn có thể kích hoạt mã đó chạy hoàn toàn bên ngoài nhật thực bằng lệnh gọi hàm pydevd.settrace (). urbansim.org/Documentation/DebuggingWithEclipse
ako

0

Cách đơn giản nhất mà tôi đã tìm thấy để gỡ lỗi mã của mình là mã cứng các đầu vào của tôi đến đường dẫn tệp của tập dữ liệu hiện có. Ví dụ:

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"

Ngoài cửa sổ kết quả, cửa sổ python mang đến các thông báo lỗi hữu ích và / hoặc cho phép bạn kiểm tra các đoạn mã.

Bất kỳ IDE tốt nào cũng có một đầu dò gỡ lỗi sẽ có, trong bộ nhớ, tất cả quá trình xử lý của bạn cho đến điểm dừng hiện tại. Cùng với đó, bạn có thể thấy những gì đang xảy ra với dữ liệu. Đặt điểm dừng nơi bạn muốn tạm dừng tập lệnh. Sử dụng các điểm dừng có điều kiện nếu bạn muốn dừng một vòng lặp ở một lần lặp cụ thể. Ngoài ra, hãy biết các phiên bản Arc của bạn và những chức năng nào có sẵn cho các phiên bản đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.