8 votos

¿Cómo puedo llamar a archivos externos en Python Servicio de Geoprocesamiento?

He creado un script en Python que se llama a un R de secuencia de comandos y, a continuación, lee el resultado de nuevo en Python. Puedo ejecutar esta herramienta en ArcGIS Desktop (10.2.1) y funciona bien. Cuando voy a publicar como un servicio de geoprocesamiento se falla una vez que se alcanza la R de secuencia de comandos. He comprobado el archivo de rutas y de que ellos están bien. Es incluso posible llamar a los scripts externos de un servicio de geoprocesamiento? Aquí está mi código.

import sys, os, arcpy
arcpy.AddMessage("Loaded Python Imports...")

try:
#User Input
lat = arcpy.GetParameterAsText(0)
long = arcpy.GetParameterAsText(1)

arcpy.AddMessage("LAT: " + "".join(lat))
arcpy.AddMessage("LONG: " + "".join(long))

#Create R Command
rScript = "test.R"
args = " ".join([lat, long])
RCMD = "R --slave --vanilla --args "
cmd = RCMD + args + " < " + rScript

#Execute
os.system(cmd)

#Render the Results
output = open("FILE PATH")
finalNumber = output.read()
print("The output is: " + " ".join(finalNumber))
arcpy.AddMessage("The output is: " + " ".join(finalNumber))
output.close()

#Delete Text File
os.remove("FILE PATH")

except Exception as e:
    print e.message
    arcpy.AddError(e.message)

2voto

Jason Antman Puntos 1378

He encontrado este artículo: la Integración de programas externos dentro de ModelBuilder, es más antiguo y, en principio, parece que es fuera de tema, pero si usted mira esto: enter image description here, se puede ver que explícitamente establece la ruta de acceso a la R de secuencia de comandos.

Cuando su secuencia de comandos de geoprocesamiento se ejecuta en el servidor, se ejecuta en un cero carpeta dentro de la jobs directorio. Dependiendo del proceso de publicación, su R script no puede estar allí. Cuando me refiero a un script externo dentro de mis servicios de geoprocesamiento, yo siempre explícitamente se refieren a ellos de una carpeta a la que ha sido registrado como un origen de datos.

1voto

cassioso Puntos 105

Usted tendrá que utilizar el ESRI herramienta de estructura e incluir los archivos en la carpeta del script si desea hacer referencia a ellos directamente por su nombre como usted está haciendo en su código. http://resources.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/sharing_tools_and_toolboxes/a_structure_for_sharing_tools.htm

De lo contrario, deberá anexar la ubicación de la secuencia de comandos en su sys.ruta de acceso. El ejemplo a continuación las referencias de archivo "\myFolder\myModules\myExtFile.py". Después de tener una referencia válida para su archivo, usted puede utilizar sus funciones personalizadas en el GP de servicio como el tiempo donde se va a publicar tiene acceso a la ruta de la carpeta.

import sys, arcpy
sys.path.append(r'\\myFolder\myModules')

import myExtFile as extFile

if __name__ == '__main__':
    # Get values from ESRI
    param1 = arcpy.GetParameterAsText(0)

    # Use custom python library
    myVal = extFile.someFunc(param1)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X