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)
python
arcgis-server
r
geoprocessing-service
Jeremy Hamm
fuente
fuente
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.Respuestas:
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: 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
jobs
directorio. 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 .fuente
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.
fuente