ArcPy स्क्रिप्ट को डीबग करना?


50

मैंने ArcGIS 10 में ArcPy का उपयोग करते हुए कई पायथन स्क्रिप्ट लिखी हैं, और अब तक मेरे डिबगिंग का एकमात्र माध्यम संदेश का उपयोग करके जियोप्रोसेसिंग परिणाम विंडो तक प्रिंट करना प्रतिबंधित है arcpy.AddMessage()

क्या वहाँ कोई अन्य विकल्प हैं, जैसे कि ब्रेक पॉइंट सेट करना?

जेसन का तरीका बहुत अच्छा काम करता है। यदि आपके उपकरण बॉक्स में एक बग है, जैसे कि सत्यापन, तो आपका आईडीई शायद समस्या को इंगित नहीं कर पाएगा क्योंकि टूलबॉक्स एन्कोडेड हैं। कम से कम विंग इसे इंगित करने में सक्षम नहीं था।


शायद यहाँ एक विकल्प है? कोड Google pyscripter
ब्रैड नेसोम

ArcGIS मदद कैसे PythonWin में डिबगर उपयोग करने के लिए की चर्चा
रेगन Sarwas

OS फ़ाइल गुणों में, आपने PyScripter को .py फ़ाइलों के लिए डिफ़ॉल्ट प्रोग्राम सेट करने का प्रयास किया है?
किलोजियो

ऐसा करने से, क्या मैं प्रभावी रूप से ओएस को नहीं बताऊंगा कि मैं अपनी पाइथन स्क्रिप्ट को चलाना नहीं चाहता, बल्कि इसे केवल संपादक में खोलें?
रयानडाल्टन

हाँ सही। क्षमा करें, मैंने आपके उद्देश्य को गलत समझा।
KiloGeo

जवाबों:


37

आमतौर पर पायथन डिबगर / आईडीई मान लेते हैं कि पायथन लिपि उसी प्रक्रिया में चल रही है, जब स्वयं ArcMap.exe में चल रही लिपि को डीबग करना सही है - आपको एक पाइथन स्क्रिप्ट में बूट किए गए GP स्क्रिप्टिंग वातावरण की पर्याप्त आवश्यकता है जैसा कि आप कर सकते हैं साथ डीबग करें।

पिछले कुछ वर्षों में मेरे लिए बहुत अच्छी तरह से काम करने वाली एक विधि एक सरल स्क्रिप्ट लिखना है, जो केवल टूल को कॉल करती है और उपयोग करती है कि पायथन आईडीई (विंग या पायथनविन) में मेरी मुख्य स्क्रिप्ट के रूप में है और मेरे ब्रेकप्वाइंट को टूल-एसपीआई में सेट करें। फ़ाइल उसी IDE सत्र में भी खुलती है।

इसलिए मूल रूप से मैं ऐसा करता हूं:

  1. मेरे स्क्रिप्ट टूल में काम नहीं कर रहे इनपुट्स का सेट प्राप्त करें
  2. टूल को कॉल करने वाली .tbx के समान फ़ोल्डर में एक साधारण .py फ़ाइल खोलें
  3. आईडीई में कॉलर स्क्रिप्ट और स्क्रिप्ट टूल .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
अच्छा समाधान! मैं कोशिश करुंगा।
जॉर्ज सिल्वा

मैं लंबे समय से प्रक्रिया स्क्रिप्ट डिबग करने के लिए अतीत में सफलतापूर्वक winpdb का उपयोग किया है। winpdb, एक बार सेट अप करने पर आपको "वर्तमान में चल रहे स्टैंडअलोन स्क्रिप्ट में कूदने की अनुमति देता है या सैद्धांतिक रूप से एक और प्रक्रिया जैसे आर्कपैक और इसे सामान्य रूप से डिबग करता है। यह एक स्क्रिप्ट पर जाँच करने के लिए बहुत आसान था जिसे पूरा होने में कई हफ्ते लगेंगे। मैंने एक आर्कजीआईएस आवेदन प्रक्रिया के दौरान आर्कपी को डिबग करने की कोशिश नहीं की है।
ब्लाह 238

मैं PyCharm की सिफारिश करेंगे। यह जादू की तरह काम करता है
user39901230

26

आप इसे जीपी विकल्प संवाद से बदल सकते हैं, बस संपादक / डिबगर के लिए अपनी निष्पादन योग्य पसंद को इंगित करें।

जीपी सेटिंग्स संवाद


यह ArcGIS 10 के लिए एक नई वृद्धि प्रतीत होता है, सही है? मुझे 9.3 के लिए यह सेटिंग विकल्प दिखाई नहीं दे रहा है।
रयानडाल्टन

सही, 10. में नया
जेसन शहीर

9

10 के उपयोगकर्ताओं के लिए, स्पष्ट रूप से जाने का सबसे अच्छा मार्ग जेसन के पद के साथ है, जिसे मैंने "सर्वश्रेष्ठ उत्तर" के रूप में चिह्नित किया था। 9.3 के उपयोगकर्ताओं के लिए, मैं इसे काम करने के लिए ब्रैड के पोस्ट में लिंक किए गए ESRI KB समर्थन निर्देशों का पालन करने में सक्षम था ।

अंततः Pyscripter में ArcGIS अजगर लिपियों के डिफ़ॉल्ट संपादन के लिए कुंजी "। फ़ाइल" (चरण # 4) में समाप्त "पंजीकृत फ़ाइल प्रकार" के लिए सिस्टम "एक्शन" को संपादित करना था। मैंने एक नया "एडिट" एक्शन टाइप बनाया और फिर Pyscripter.exe पथ को शामिल किया। एक बार जब मैंने ऐसा किया, डिफॉल्ट एडिट एक्शन सेटअप किया गया था ताकि आईडीएलई के बजाय पाइसक्रिफ्ट लॉन्च किया जा सके।

मैंने जो स्ट्रिंग का उपयोग किया (क्योंकि यह नीचे दिखाए गए डायलॉग बॉक्स में कट गया था) है:

"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 में एक डिबग जांच होती है, जो मेमोरी में आपके वर्तमान ब्रेकपॉइंट तक सभी प्रोसेसिंग करती है। इसके साथ, आप देख सकते हैं कि डेटा के साथ क्या हो रहा है। ब्रेकपॉइंट सेट करें जहां आप स्क्रिप्ट को रोकना चाहते हैं। यदि आप एक विशिष्ट पुनरावृत्ति पर एक लूप को रोकना चाहते हैं तो सशर्त ब्रेकप्वाइंट का उपयोग करें। इसके अलावा, अपने आर्क संस्करणों को जानें और उन संस्करणों के लिए कौन से कार्य उपलब्ध हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.