Skript im Python-Fenster von ArcMap ausführen?

10

Ich habe Python in meinem Texteditor geschrieben, daher habe ich ein Python-Skript, script.py. Ich entwickle es noch, möchte es also noch nicht in meine Toolbox aufnehmen. Im Moment bedeutet dies, es aus meinem Texteditor in das Python-Fenster in ArcGIS Desktop zu kopieren und einzufügen.

Gibt es einen Befehl, mit dem ich ihn über das ArcGIS Python-Fenster aufrufen kann?

Etwas in der Art von:

run script.py

Es scheint logisch, dass es existieren sollte, aber vielleicht auch nicht.

Whatahitson
quelle
Sie erstellen Ihr Skript in einem Texteditor? Holen Sie sich die kostenlose Pyscripter-Idee, es wird das Beste sein, was Sie jemals tun werden!
Hornbydd

Antworten:

17

Sie könnten verwenden execfile.

Zum Beispiel,

>>> execfile(r'c:\my\script.py')
Jason Scheirer
quelle
4

Ich bin mir Ihrer Erfahrung nicht sicher, aber bevor Sie zu weit kommen, sollten Sie einige Best Practices in Python lernen. Es wäre idiomatischer oder " Pythonic ", Ihren Code in Funktionen / Klassen , Ihr Modul, zu modularisieren und eine oder mehrere Funktionen / Klassen aufzurufen.import

Wenn Sie Änderungen vornehmen und das bereits importierte Modul interaktiv testen möchten, können Sie die reloadintegrierte Funktion verwenden.

Verwenden Sie den if __name__ == '__main__'Trick , um die Hauptprozedur Ihres Skripts (alles andere als Importe, Funktions- / Klassendeklarationen und möglicherweise einige Variablendeklarationen auf Modulebene) vor der automatischen Ausführung beim Importieren des Moduls zu schützen, und führen Sie diese Logik nur aus, wenn Sie das Skript direkt ausführen, z. B. von eine Eingabeaufforderung oder über ArcToolbox.

Anschließend können Sie bestimmte Teile Ihres Moduls testen, indem Sie einfach die entsprechenden Klassen / Funktionen aufrufen.

blah238
quelle
1
Dann müssen Sie sich mit der reload()Funktion und der ganzen Unangenehmkeit des Modul-Caching und dergleichen in Python befassen . Wenn Sie iterativ ein kleines Skript in einem Texteditor schreiben, ist dies ein wenig übertrieben.
Jason Scheirer
1
Ich hatte keine Probleme damit reload, solange ich es vermeide, from module import xoder zu verwenden from module import *.
blah238