J'ai créé un script Python qui appelle un script R et lit ensuite la sortie en Python. Je peux exécuter cet outil dans ArcGIS Desktop (10.2.1) et cela fonctionne très bien. Lorsque je publie en tant que service de géotraitement, il échoue une fois qu'il a atteint le script R. J'ai vérifié les chemins de fichiers et ils vont bien. Est-il même possible d'appeler des scripts externes à partir d'un service de géotraitement? Voici mon code.
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
la source
la source
Rscript test.R arg1 arg2 arg3
place? Juste au cas où vous ne seriez pas au courant de cette option, voici un exemple simple de ce à quoi cela ressemble dans la pratique.Réponses:
J'ai trouvé cet article: Intégrer des programmes externes dans ModelBuilder , il est plus ancien et semble initialement hors sujet, mais si vous regardez ceci:, vous pouvez voir qu'il définit explicitement le chemin d'accès au script R.
Lorsque votre script de géotraitement s'exécute sur le serveur, il s'exécute dans un dossier de travail dans le
jobs
répertoire. Selon le processus de publication, votre script R peut ne pas y être. Chaque fois que je fais référence à un script externe au sein de mes services de géotraitement, je m'y réfère toujours explicitement à partir d'un dossier qui a été enregistré en tant que source de données .la source
Vous devrez utiliser la structure de l'outil ESRI et inclure les fichiers dans votre dossier de script si vous souhaitez les référencer directement par leur nom comme vous le faites dans votre code. http://resources.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/sharing_tools_and_toolboxes/a_structure_for_sharing_tools.htm
Sinon, vous devrez ajouter l'emplacement du script dans votre sys.path. L'exemple ci-dessous fait référence au fichier "\ myFolder \ myModules \ myExtFile.py". Une fois que vous avez une référence valide à votre fichier, vous pouvez utiliser vos fonctions personnalisées dans le service GP tant que l'endroit où vous publiez a accès au chemin du dossier.
la source