Ich habe ein Python-Skript erstellt, das ein R-Skript aufruft und dann die Ausgabe zurück in Python liest. Ich kann dieses Tool in ArcGIS Desktop (10.2.1) ausführen und es funktioniert einwandfrei. Wenn ich als Geoverarbeitungsdienst veröffentliche, schlägt dies fehl, sobald das R-Skript erreicht ist. Ich habe die Dateipfade überprüft und sie sind in Ordnung. Ist es überhaupt möglich, externe Skripte von einem Geoverarbeitungsdienst aufzurufen? Hier ist mein 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
quelle
quelle
Rscript test.R arg1 arg2 arg3
verwenden? Für den Fall, dass Ihnen diese Option nicht bekannt war, finden Sie hier ein einfaches Beispiel dafür , wie dies in der Praxis aussieht.Antworten:
Ich habe diesen Artikel gefunden: Die Integration externer Programme in ModelBuilder ist älter und sieht anfangs nicht zum Thema aus. Wenn Sie sich jedoch Folgendes ansehen: Sie können sehen, dass der Pfad zum R-Skript explizit festgelegt wird.
Wenn Ihr Geoverarbeitungsskript auf dem Server ausgeführt wird, wird es in einem Arbeitsordner im
jobs
Verzeichnis ausgeführt. Abhängig vom Veröffentlichungsprozess ist Ihr R-Skript möglicherweise nicht vorhanden. Wenn ich in meinen Geoverarbeitungsdiensten auf ein externes Skript verweise, verweise ich immer explizit auf diese aus einem Ordner, der als Datenquelle registriert wurde .quelle
Sie müssen die ESRI-Toolstruktur verwenden und die Dateien in Ihren Skriptordner aufnehmen, wenn Sie sie direkt nach Namen referenzieren möchten, wie Sie es in Ihrem Code tun. http://resources.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/sharing_tools_and_toolboxes/a_structure_for_sharing_tools.htm
Andernfalls müssen Sie den Speicherort des Skripts in Ihrem sys.path anhängen. Das folgende Beispiel verweist auf die Datei "\ myFolder \ myModules \ myExtFile.py". Nachdem Sie einen gültigen Verweis auf Ihre Datei haben, können Sie Ihre benutzerdefinierten Funktionen im GP-Dienst verwenden, solange der Ort, an dem Sie veröffentlichen, Zugriff auf den Ordnerpfad hat.
quelle