Làm cách nào để gọi các tệp bên ngoài trong Dịch vụ xử lý địa lý Python?


8

Tôi đã tạo một tập lệnh Python gọi tập lệnh R và sau đó đọc kết quả đầu ra thành Python. Tôi có thể chạy công cụ này trong ArcGIS Desktop (10.2.1) và nó hoạt động tốt. Khi tôi xuất bản dưới dạng dịch vụ xử lý địa lý, nó sẽ thất bại một khi nó đạt đến tập lệnh R. Tôi đã kiểm tra đường dẫn tập tin và chúng vẫn ổn. Thậm chí có thể gọi các tập lệnh bên ngoài từ một dịch vụ xử lý địa lý không? Đây là mã của tôi.

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)

Tôi không biết phiên bản máy chủ ArcGIS nào bạn đang sử dụng và tôi không biết cấu hình hệ thống của bạn, nhưng người ta nghĩ rằng, ít nhất là với cấu hình ArcGIS Server cũ, v10.0 trở lên, mọi dịch vụ đều chạy thường được chạy qua một tài khoản người dùng chuyên dụng (người dùng SOM & SOC, v.v ....). Tôi không biết các quyền của bạn được thiết lập như thế nào, nhưng tôi sẽ nhận được với quản trị viên máy chủ / web của bạn nếu không phải bạn và tìm hiểu xem người dùng nào đang được sử dụng để chạy dịch vụ và nếu người dùng đó có tất cả các quyền cần thiết để truy cập tất cả các chương trình và tập tin liên quan. Ngoài ra, bạn đã kiểm tra nó trong ArcDesktop từ máy chủ chưa?
John

Tôi đang sử dụng ArcGIS Server 10.2.1 và tôi là quản trị viên web. Chúng tôi đã kiểm tra các quyền và đó không phải là vấn đề. Công cụ này hoạt động trong ArcGIS Desktop trên máy chủ nhưng không phải là dịch vụ xử lý địa lý. Khi công cụ được chạy từ máy tính để bàn, cửa sổ bảng điều khiển R bật lên và hiển thị các quy trình R. Tôi không thấy điều này khi chạy dịch vụ. Tôi biết R được cài đặt trên máy chủ vì chúng tôi có thể chạy công cụ trên máy tính để bàn ArcGIS. Chà tôi đoán tất cả những gì cần làm là tiếp tục khắc phục sự cố
Jeremy Hamm

Tôi không biết gì về vấn đề đặc biệt này, nhưng bạn đã thử sử dụng một cái gì đó như Rscript test.R arg1 arg2 arg3thế nào chưa? Chỉ trong trường hợp bạn không biết về tùy chọn đó, đây là một ví dụ đơn giản về những gì trông giống như trong thực tế.
Josh O'Brien

Vâng, tôi không nghĩ rằng vấn đề là ở chính tập lệnh R. Khi tôi chạy dịch vụ xử lý địa lý trong ArcMap, nó bị lỗi trước khi tập lệnh R được gọi hoặc trong khi cố gắng gọi tập lệnh. Tôi biết R được cài đặt trên máy chủ. Tôi thực sự bối rối vì điều này ...
Jeremy Hamm

OK chúc may mắn. Nếu bạn tìm ra điều này, xin vui lòng gửi câu trả lời ở đây.
Josh O'Brien

Câu trả lời:


2

Tôi đã tìm thấy bài viết này: Tích hợp các chương trình bên ngoài trong ModelBuilder , nó cũ hơn và ban đầu có vẻ như không có chủ đề, nhưng nếu bạn nhìn vào điều này : nhập mô tả hình ảnh ở đây, bạn có thể thấy rằng nó đặt đường dẫn đến tập lệnh R một cách rõ ràng.

Khi tập lệnh xử lý địa lý của bạn chạy trên máy chủ, nó sẽ chạy trong một thư mục cào trong thư mục jobs. Tùy thuộc vào quá trình xuất bản, tập lệnh R của bạn có thể không có ở đó. Bất cứ khi nào tôi đề cập đến tập lệnh bên ngoài trong các dịch vụ xử lý địa lý của mình, tôi luôn đề cập rõ ràng đến chúng từ một thư mục đã được đăng ký làm nguồn dữ liệu .


Tôi thực sự đã sử dụng một phương pháp tương tự như thế này nhưng không phải là tuyến đường của dịch vụ xử lý địa lý. Tập lệnh python thực thi mã R và đọc trong tệp văn bản đầu ra từ tập lệnh R. Đây là cách hiệu quả nhất để chạy mô hình của chúng tôi và trả về kết quả
Jeremy Hamm

1

Bạn sẽ cần sử dụng cấu trúc công cụ ESRI và bao gồm các tệp trong thư mục tập lệnh nếu bạn muốn tham chiếu chúng trực tiếp theo tên giống như bạn đang làm trong mã của mình. http://resource.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/shared_tools_and_toolboxes/a_structure_for_shared_tools.htmlm

Nếu không, bạn sẽ cần nối thêm vị trí của tập lệnh trong sys.path của bạn. Ví dụ bên dưới tệp tham chiếu "\ myFolder \ myModules \ myExtFile.py". Sau khi bạn có một tham chiếu hợp lệ cho tệp của mình, bạn có thể sử dụng các chức năng tùy chỉnh của mình trong dịch vụ GP miễn là nơi bạn đang xuất bản có quyền truy cập vào đường dẫn thư mục.

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.