Executando script na janela Python do ArcMap?

10

Eu tenho escrito Python no meu editor de texto, então eu tenho um script Python, script.py. Ainda o estou desenvolvendo, por isso não quero colocá-lo na minha caixa de ferramentas e, no momento, isso significa copiá-lo e colá-lo do meu editor de texto para a janela Python no ArcGIS Desktop.

Existe um comando que me permita chamá-lo a partir da janela do ArcGIS Python?

Algo ao longo das linhas de:

run script.py

Parece lógico que deveria existir, mas talvez não.

whatahitson
fonte
Você está construindo seu script em um editor de texto? Pegue o ide pyscripter grátis, será a melhor coisa que você fará!
Hornbydd

Respostas:

17

Você poderia usar execfile.

Por exemplo,

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

Não tenho certeza do seu nível de experiência, mas antes que você chegue muito longe, você precisará aprender algumas práticas recomendadas em Python. Seria mais idiomático, ou " Pythonic ", modularizar seu código em funções / classes , importseu módulo e chamar uma ou mais funções / classes.

Se você deseja fazer alterações e testar interativamente o módulo já importado, pode usar a reloadfunção interna.

Use o if __name__ == '__main__'truque para proteger o procedimento principal do seu script (tudo que não seja importação, declaração de função / classe e talvez algumas declarações de variável no nível do módulo) sejam executados automaticamente ao importar o módulo e somente execute essa lógica ao executar o script diretamente, por exemplo, de um prompt de comando ou por meio do ArcToolbox.

Então você pode testar partes específicas do seu módulo, apenas chamando as classes / funções relevantes.

blah238
fonte
1
Então você tem que lidar com a reload()função e toda a maldade do cache do módulo e outras coisas no Python. Se você estiver escrevendo iterativamente algum pequeno script em um editor de texto, isso é um pouco exagerado.
Jason Scheirer
1
Não tive problemas reloaddesde que evite usar from module import xou from module import *.
precisa saber é o seguinte