¿Ejecutando script en la ventana de Python de ArcMap?

10

He estado escribiendo Python en mi editor de texto, así que tengo un script de Python, script.py. Todavía lo estoy desarrollando, así que no quiero ponerlo en mi caja de herramientas todavía, y por el momento esto significa copiarlo y pegarlo desde mi editor de texto a la ventana de Python en ArcGIS Desktop.

¿Hay algún comando que me permita llamarlo desde la ventana de ArcGIS Python?

Algo en la línea de:

run script.py

Parece lógico que deba existir, pero quizás no.

whatahitson
fuente
¿Estás construyendo tu script en un editor de texto? Obtenga el ide de pyscripter gratis, ¡será lo mejor que podrá hacer!
Hornbydd

Respuestas:

17

Podrías usar execfile.

Por ejemplo,

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

No estoy seguro de su nivel de experiencia, pero antes de llegar demasiado lejos querrá aprender algunas prácticas recomendadas en Python. Sería más idiomático, o " Pythonic ", modularizar su código en funciones / clases , importsu módulo, y llamar a una o más funciones / clases.

Si desea realizar cambios y probar de forma interactiva el módulo ya importado, puede usar la reloadfunción incorporada.

Use el if __name__ == '__main__'truco para proteger el procedimiento principal de su secuencia de comandos (todo, excepto las importaciones, las declaraciones de función / clase, y tal vez algunas declaraciones de variables de nivel de módulo) de ejecutarse automáticamente al importar el módulo, y solo ejecute esa lógica cuando ejecute la secuencia de comandos directamente, por ejemplo, desde un símbolo del sistema o a través de ArcToolbox.

Luego puede probar partes específicas de su módulo simplemente llamando a las clases / funciones relevantes.

blah238
fuente
1
Luego tienes que lidiar con la reload()función y toda la maldad del almacenamiento en caché de módulos y demás en Python. Si está escribiendo iterativamente un pequeño script en un editor de texto, esto es un poco exagerado.
Jason Scheirer el
1
No he tenido ningún problema reloadmientras evito usar from module import xo from module import *.
blah238