利用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模型的输出参数已经被屏蔽,又如何去自由选择输出的路径呢?

        这一点还是钻了一下空子的,只有输出的路径被屏蔽,如果不以输出的路径/文件形式存在,也就是不被检测为输出参数,就可以随心所欲了~

具体的关于这部分模型的构建技巧,后续再给大家整理出来。

 

————欢迎来访,拒绝转载———- 

转载自:https://blog.csdn.net/zhaohuihui6628/article/details/47321789

You may also like...