¿Cómo llamo a archivos externos en Python Geoprocessing Service?

8

He creado un script Python que llama a un script R y luego lee la salida nuevamente en Python. Puedo ejecutar esta herramienta en ArcGIS Desktop (10.2.1) y funciona bien. Cuando publico como un servicio de geoprocesamiento, falla una vez que alcanza el script R. He revisado las rutas de los archivos y están bien. ¿Es posible llamar scripts externos desde 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)
Jeremy Hamm
fuente
No sé qué versión del servidor ArcGIS está utilizando y no conozco la configuración de su sistema, pero uno piensa que, al menos con la configuración anterior de ArcGIS Server, v10.0 y anteriores, cualquier servicio ejecutado generalmente se ejecuta a través de una cuenta de usuario dedicada (usuarios de SOM y SOC, etc.). No sé cómo están configurados sus permisos, pero me pondría en contacto con su servidor / administrador web si no es usted y averiguaría qué usuario se está utilizando para ejecutar el servicio y si ese usuario tiene todos los permisos necesarios para acceder a todos Los programas y archivos involucrados. Además, ¿lo probaste en ArcDesktop desde el servidor?
John
Estoy usando ArcGIS Server 10.2.1 y soy el administrador web. Hemos probado los permisos y ese no es el problema. La herramienta funciona en ArcGIS Desktop en el servidor pero no como un servicio de geoprocesamiento. Cuando la herramienta se ejecuta desde el escritorio, aparece una ventana de consola R que muestra los procesos R. No veo esto cuando ejecuto el servicio. Sé que R está instalado en el servidor ya que podemos ejecutar la herramienta en el escritorio de ArcGIS. Bueno, supongo que todo lo que hay que hacer es continuar solucionando problemas
Jeremy Hamm
No sé nada sobre este problema en particular, pero ¿has intentado usar algo como esto Rscript test.R arg1 arg2 arg3? En caso de que no conozca esa opción, aquí hay un ejemplo simple de cómo se ve en la práctica.
Josh O'Brien
Sí, no creo que el problema sea con el script R en sí. Cuando ejecuto el servicio de geoprocesamiento en ArcMap, falla antes de que se llame al script R o al intentar llamar al script. Sé que R está instalado en el servidor. Estoy realmente perplejo por esto ...
Jeremy Hamm
OK buena suerte. Si se da cuenta de esto, publique la respuesta aquí.
Josh O'Brien

Respuestas:

2

Encontré este artículo: Al integrar programas externos dentro de ModelBuilder , es más antiguo e inicialmente parece que está fuera de tema, pero si observa esto: ingrese la descripción de la imagen aquípuede ver que establece explícitamente la ruta al script R.

Cuando su script de geoprocesamiento se ejecuta en el servidor, se ejecuta en una carpeta provisional dentro del jobsdirectorio. Dependiendo del proceso de publicación, su script R puede no estar allí. Cada vez que me refiero a un script externo dentro de mis servicios de geoprocesamiento, siempre me refiero explícitamente a ellos desde una carpeta que ha sido registrada como fuente de datos .

pgreen2
fuente
De hecho, utilicé un método similar a este, pero no la ruta de un servicio de geoprocesamiento. La secuencia de comandos de Python ejecuta el código R y lee en el archivo de texto de salida de la secuencia de comandos R. Esta fue la forma más eficiente de ejecutar nuestro modelo y devolver resultados
Jeremy Hamm,
1

Necesitará usar la estructura de la herramienta ESRI e incluir los archivos en su carpeta de script si desea hacer referencia a ellos directamente por nombre como lo hace 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á agregar la ubicación del script en su sys.path. El siguiente ejemplo hace referencia al archivo "\ myFolder \ myModules \ myExtFile.py". Después de tener una referencia válida a su archivo, puede usar sus funciones personalizadas en el servicio GP siempre que tenga acceso a la ruta de la carpeta donde está publicando.

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)
Adio3012
fuente