ArcPyスクリプトをデバッグしますか?


50

ArcGIS 10でArcPyを使用して多くのPythonスクリプトを記述しましたが、これまでのところ、デバッグの唯一の手段はを使用してジオプロセシング結果ウィンドウにメッセージを出力することだけarcpy.AddMessage()です。

ブレークポイントの設定など、他のオプションはありますか?

ジェイソンの方法はすばらしい。検証など、ツールボックスにバグがある場合、ツールボックスがエンコードされているため、IDEで問題を特定できない可能性があります。少なくともWINGはそれを特定できませんでした。


ここにオプションがありますか?コードのGoogle pyscripter
ブラッドNesom

ArcGISのヘルプ PythonWinでデバッガを使用する方法について説明
リーガンSarwas

OSファイルのプロパティで、.pyファイルのデフォルトプログラムをPyScripterに設定しようとしましたか?
KiloGeo

これを行うことで、Pythonスクリプトを実行したくないことをOSに効果的に伝えるのではなく、単にエディターで開くだけですか?
ライアンダルトン

はい正解。申し訳ありませんが、あなたの目的を誤解しました。
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")

winmapdbを使用して、ArcMapで実行されているスクリプトをデバッグしようとしましたが、運がありませんでした。試してみて、うまく機能するようになったら、結果を共有してください。


1
いい解決策!やってみます。
ジョージシルバ

過去にwinpdbを使用して、長いプロセスのスクリプトをデバッグしました。winpdbをセットアップすると、現在実行中のスタンドアロンスクリプト、または理論的にはArcMapなどの別のプロセス内のスクリプトに「ジャンプ」して、通常どおりにデバッグできます。これは、完了するまでに数週間かかるスクリプトをチェックインするのに非常に便利でした。ただし、ArcGISアプリケーションプロセス内でarcpyをデバッグしたことはありません。
blah238

PyCharmをお勧めします。それは魔法のように動作します
user39901230


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 for Eclipseには同様の機能があり、これについてはここで説明します。シグナルをリッスンするようにEclipseを設定し、pydevd.settrace()関数呼び出しによってEclipseの完全に外部で実行されているコードでそれをトリガーできます。urbansim.org/Documentation/DebuggingWithEclipse
赤穂

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"

結果ウィンドウに加えて、Pythonウィンドウでは有用なエラーメッセージが表示され、コードスニペットをテストできます。

優れたIDEには、メモリ内に現在のブレークポイントまでのすべての処理を行うデバッグプローブがあります。これにより、データで何が起こっているかを確認できます。スクリプトを一時停止するブレークポイントを設定します。特定の反復でループを停止する場合は、条件付きブレークポイントを使用します。また、Arcのバージョンと、それらのバージョンで使用可能な機能を知ってください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.