利用Python分析GP服務運行結果的輸出路徑 & 實現服務輸出路徑的本地化

最近,一直糾結一個問題:做好的GP模型或者腳本在本地運行,一切正常;發佈爲GP服務以後時而可以運行成功,而更多的是運行失敗,甚至不能知曉運行成功後的結果輸出在哪裏。

鋪天蓋地的文檔告訴我,如下信息:




這些來自官方的Esri help信息大體可以總結爲: GP服務結果的輸出路徑由服務器管理不能人爲控制,即使是指定了它輸出的工作環境,服務運行依然會忽略環境設置,而執行的結果會輸出在PackageWorkspace指定的路徑下,而packageWorkspace又是隻讀的,不能夠對其指定的路徑做出修改。

萬念俱灰間,以爲這是一條再不能行的死路。

------------------------------------------------

首先慢慢的分析,利用python找到這個packageWorkspace的輸出路徑到底是什麼,即輸出執行的環境,腳本如下:

# -*- coding:utf-8 -*-
import arcpy
from arcpy import env
import os
inputpath = arcpy.GetParameterAsText(0)
txtpath = os.path.join(inputpath,"env_file.txt") 

outtxt = open(txtpath,'w')
environments = arcpy.ListEnvironments()
for environment in environments:
    envSetting = getattr(env,environment)
    outtxt.writelines(environment+":"+"\t")
    outtxt.writelines(str(envSetting)+'\n')
outtxt.flush()
outtxt.close()

將以上腳本發佈爲服務,查看運行的結果如下:

Packageworkspace指明瞭服務結果的輸出路徑,其實和預料的一樣,在站點的directories路徑下,只是相對冗長,且在該路徑下打包了GP工具及輸出的結果。

那麼服務輸出的結果真的只能在這裏麼?該怎樣設置?

 

-------------------------------------------------

實際上很簡單的,服務端運行,之所以指定到服務器所管理的目錄下,是因爲需要調用GP服務的結果然後返回給客戶端,也就是說,至少輸出位置必須是服務器端可訪問的、共享的,於是,將做好的GP模型再次發佈,輸入參數與輸出位置均存在於服務器端可訪問的位置上,再次執行服務,執行成功!

多次實驗的經驗如下:

1.      即使設置了scratch workspace與current workspace,對服務器端執行結果沒有影響,因爲環境設置自動被忽略。

2.      服務的輸入參數不被服務器可訪問,而輸出路徑可被服務器端訪問,執行會失敗!

3.      服務的輸出路徑不被服務器端可訪問,輸出參數路徑可被服務器端訪問,執行會失敗!

 

還有一點,想必大家會疑惑,GP模型的輸出參數已經被屏蔽,又如何去自由選擇輸出的路徑呢?

        這一點還是鑽了一下空子的,只有輸出的路徑被屏蔽,如果不以輸出的路徑/文件形式存在,也就是不被檢測爲輸出參數,就可以隨心所欲了~

具體的關於這部分模型的構建技巧,後續再給大家整理出來。

 

------------歡迎來訪,拒絕轉載---------- 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章