Bagaimana cara saya memanggil file eksternal di Python Geoprocessing Service?

8

Saya telah membuat skrip Python yang memanggil skrip R dan kemudian membaca hasilnya kembali menjadi Python. Saya dapat menjalankan alat ini di ArcGIS Desktop (10.2.1) dan berfungsi dengan baik. Ketika saya menerbitkan sebagai layanan geoproses, gagal setelah mencapai skrip R. Saya telah memeriksa path file dan semuanya baik-baik saja. Apakah mungkin untuk memanggil skrip eksternal dari layanan geoprocessing? Ini kode saya.

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
sumber
Saya tidak tahu versi apa dari server ArcGIS yang Anda gunakan dan saya tidak tahu konfigurasi sistem Anda, tetapi satu pemikiran adalah bahwa, setidaknya dengan konfigurasi Server ArcGIS yang lebih lama, v10.0 dan yang lebih lama, setiap layanan yang dijalankan akan umumnya dijalankan melalui akun pengguna khusus (pengguna SOM & SOC, dll ....). Saya tidak tahu bagaimana Anda mengatur izin, tapi saya akan dapatkan dengan server / admin web Anda jika tidak Anda dan mencari tahu pengguna apa yang digunakan untuk menjalankan layanan dan jika pengguna itu memiliki semua izin yang diperlukan untuk mengakses semua program & file yang terlibat. Juga, apakah Anda mengujinya di ArcDesktop dari server?
John
Saya menggunakan ArcGIS Server 10.2.1 dan saya adalah admin web. Kami telah menguji izin dan itu bukan masalahnya. Alat ini berfungsi di ArcGIS Desktop pada server tetapi tidak sebagai layanan geoproses. Ketika alat dijalankan dari desktop, sebuah jendela konsol R akan muncul dan menunjukkan proses R. Saya tidak melihat ini ketika menjalankan layanan. Saya tahu R diinstal pada server karena kami dapat menjalankan alat di desktop ArcGIS. Yah saya kira semua yang harus dilakukan adalah terus memecahkan masalah
Jeremy Hamm
Saya tidak tahu apa-apa tentang masalah khusus ini, tetapi apakah Anda sudah mencoba menggunakan sesuatu seperti itu Rscript test.R arg1 arg2 arg3? Kalau-kalau Anda tidak mengetahui opsi itu, berikut adalah contoh sederhana dari apa yang terlihat dalam praktiknya.
Josh O'Brien
Ya saya tidak berpikir masalahnya adalah dengan script R itu sendiri. Ketika saya menjalankan layanan geoprocessing di ArcMap gagal sebelum script R dipanggil atau saat mencoba memanggil script. Saya tahu R diinstal di server. Saya benar-benar bingung dengan ini ...
Jeremy Hamm
OK, semoga berhasil. Jika Anda mengetahui hal ini, silakan kirim jawabannya di sini.
Josh O'Brien

Jawaban:

2

Saya menemukan artikel ini: Mengintegrasikan program eksternal di dalam ModelBuilder , ini lebih tua dan awalnya terlihat seperti di luar topik, tetapi jika Anda melihat ini :,masukkan deskripsi gambar di sini Anda dapat melihat bahwa itu secara eksplisit menetapkan path ke script R.

Ketika skrip geoproses Anda berjalan di server, skrip berjalan di folder awal di dalam jobsdirektori. Bergantung pada proses penerbitan, skrip R Anda mungkin tidak ada di sana. Setiap kali saya merujuk ke skrip eksternal dalam layanan geoprocessing saya, saya selalu merujuk secara eksplisit pada mereka dari folder yang telah terdaftar sebagai sumber data .

pgreen2
sumber
Saya benar-benar menggunakan metode yang mirip dengan ini tetapi tidak dengan rute layanan geoprocessing. Skrip python mengeksekusi kode R dan membaca dalam file teks output dari script R. Ini adalah cara paling efisien untuk menjalankan model kami dan mengembalikan hasil
Jeremy Hamm
1

Anda perlu menggunakan struktur alat ESRI dan memasukkan file dalam folder skrip Anda jika Anda ingin merujuknya langsung dengan nama seperti yang Anda lakukan dalam kode Anda. http://resources.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/sharing_tools_and_toolboxes/a_structure_for_sharing_tools.htm

Jika tidak, Anda harus menambahkan lokasi skrip di sys.path Anda. Contoh di bawah ini merujuk file "\ myFolder \ myModules \ myExtFile.py". Setelah Anda memiliki referensi yang valid ke file Anda, Anda dapat menggunakan fungsi kustom Anda di layanan GP selama Anda menerbitkan memiliki akses ke jalur folder.

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
sumber