Suite

Déboguer les outils de script Python d'ArcPy ?


J'ai récemment reçu un outil de script dans un fichier tbx pour jouer avec.

J'aimerais voir comment l'outil s'exécute dans un débogueur pour avoir une meilleure idée de son fonctionnement. J'ai essayé plusieurs chemins pour cela, mais tous semblent avoir échoué:

  1. Ouvrir dans Visual Studio, ou un autre IDE : l'explorateur Windows, bien sûr, ne reconnaît pas .tbx en tant que conteneur, et affiche juste des ordures.
  2. Cliquez avec le bouton droit sur l'outil et utilisez l'option "Déboguer": l'outil s'exécute comme d'habitude, mais je n'ai aucun contrôle sur les étapes, les points d'arrêt, etc. Je ne peux pas voir le code en cours d'exécution.
  3. Faites un clic droit sur l'outil et utilisez le bouton "Modifier": le script python s'ouvre dans le Bloc-notes. Il ne semble pas y avoir de moyen de choisir un autre éditeur. Bien sûr, le bloc-notes n'a pas d'option de construction ou de compilation, je ne peux donc pas modifier le code même pour imprimer la sortie.
  4. Copier le code dans Visual Studio et l'exécuter là-bas : lorsque j'essaie d'exécuter le débogage à partir d'ArcMap, je rencontre ce problème

Voici comment je débogue/modifie généralement les fichiers python pour les outils de script python dans ArcMap (et comment ESRI suggère de le faire)

Tout d'abord, définissez votre éditeur (tel que PythonWin ou Wing) dans Géotraitement > Options de géotraitement. Ensuite, dans la fenêtre Catalogue, cliquez avec le bouton droit sur votre outil et cliquez sur Modifier.

Le géotraitement ne lit pas le code de votre script tant que vous n'avez pas cliqué sur OK dans la boîte de dialogue de l'outil de script ou appuyé sur ENTREE dans la fenêtre Python.

Un flux de travail courant lorsque vous travaillez avec des outils de script Python est le suivant :

  • Modifiez votre script (en utilisant PythonWin ou IDLE, par exemple) et enregistrez vos modifications, mais ne quittez pas l'application d'édition.
  • Exécutez l'outil de script.
  • Si nécessaire, apportez d'autres modifications au code, en sauvegardant vos modifications sans quitter l'application d'édition.
  • Exécutez à nouveau l'outil de script.
  • Lorsque vous êtes convaincu que votre script fonctionne correctement, quittez l'application d'édition.

Pour déboguer les boîtes à outils Python, j'ai généralement un fichier "debug.py" séparé dans mon projet où je teste uniquement certains modules ou extraits de code. Le script est très simple, configuré comme ceci :

import os import arcpy def main() : # code à tester ici, définissez le point d'arrêt et passez à l'étape suivante si __name__ == "__main__": main()

Lorsqu'une boîte à outils Python génère une erreur, j'inspecte le numéro de ligne et copie la fonction ou la méthode qui contient la ligne en question dans debug.py. Je code en dur les différentes valeurs de paramètres d'entrée que l'outil aurait normalement, et parcoure mon code et trouve exactement quelle est l'erreur. Enfin, j'applique les modifications au fichier .pyt de la boîte à outils Python. J'utilise actuellement le code Visual Studio pour exécuter mes scripts Python.

Éditer:

Je souhaite également ajouter ce lien : Comment déboguer les boîtes à outils Python en 3 étapes faciles. Cet article montre une autre méthode simple de débogage d'une boîte à outils python en ajoutant simplement une méthode main() :

class MyToolbox(object): def __init__(self): class MyTool(object): def __init__(self): self.label = 'Tool 1' def getParameterInfo(self): # parameters… return params def execute(self, parameters, messages): # faire des trucs… return def main(): # définir le point d'arrêt ici, pas à pas tbx = MyToolbox() tool = MyTool() tool.execute(tool.getParameterInfo(), None) if __name__ == "__main__" : principale()