在 Python 中访问许可和扩展模块
每当在脚本中执行工具时,都会需要 ArcGIS 许可。此外,对于 ArcGIS 扩展模块,如 ArcGIS Spatial Analyst 扩展模块,也需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcGIS for Desktop Basic 的许可,并试图运行需要 标准版 或 高级版 的许可,则工具将运行失败。
使用 ArcGIS for Desktop Basic 或 标准版 许可时,脚本应将产品设置为 基本版 或 标准版。同样,使用 Engine 或 EngineGeoDB 许可时,脚本应将产品设置为 Engine 或 EngineGeoDB。如果未明确设置许可,将根据首次访问 ArcPy 工具、函数或类时的最高可用许可等级初始化许可。
每种工具都将执行检查以确保具有相应的许可。如果不具有所需的许可,工具将运行失败。为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败。
只有在独立脚本中才必须设置产品和扩展模块。如果从 Python 窗口运行工具或者使用脚本工具,产品已在应用程序内进行设置,激活的扩展模块取决于“扩展模块”对话框。
Desktop、Engine/Server 许可
产品模块会在导入 arcpy 前导入,以定义脚本使用的 Desktop 许可。CheckProduct 函数可用于检查 Desktop 许可的可用性,而 ProductInfo 函数能报告当前的产品许可。
产品级别应通过在导入 arcpy 前,先导入相应的产品模块(arcinfo、arceditor、arcview、arcserver、arcenginegeodb、或 arcengine)进行设置。SetProduct 函数是遗留函数,一旦导入 arcpy 后将无法设置产品。
扩展模块许可
可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。CheckExtension 函数用于查看是否存在可为特定类型的扩展模块检出的许可,而 CheckOutExtension 会真正获取许可。脚本获取到扩展模块许可后,即可执行扩展模块工具。脚本使用完特定扩展模块中的工具后,应使用 CheckInExtension 函数将许可归还给许可管理器,以便其他应用程序使用。当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。
下面的示例将执行一些 ArcGIS 3D Analyst 工具,并将 Desktop 产品许可设置为 ArcGIS for Desktop Basic,因为执行扩展模块中的工具时不需要 ArcGIS for Desktop Advanced 的许可。如果未明确设置 ArcGIS for Desktop Basic 的许可,并且无可用的 ArcGIS for Desktop Advanced 许可,则脚本将失败,因为运行扩展模块工具需要 Desktop 许可。
class LicenseError(Exception):
pass
# Set desktop license used to ArcGIS for Desktop Basic
#
import arcview
import arcpy
from arcpy import env
try:
if arcpy.CheckExtension("3D") == "Available":
arcpy.CheckOutExtension("3D")
else:
# Raise a custom exception
#
raise LicenseError
env.workspace = "D:/GrosMorne"
arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except LicenseError:
print "3D Analyst license is unavailable"
except:
print arcpy.GetMessages(2)
finally:
# Check in the ArcGIS 3D Analyst 扩展模块
#
arcpy.CheckInExtension("3D")
上例中,ArcGIS 3D Analyst 扩展模块 通过 finally 子句检入,从而确保无论是否出现异常都会检回该扩展模块。
返回值 Failed、Unavailable 或 NotLicensed 表示无法成功检出扩展模块。
以下是扩展模块名称及其扩展编码名称:
扩展模块 |
扩展编码 |
---|---|
ArcGIS 3D Analyst 扩展模块 |
3D |
ArcGIS Schematics 扩展模块 |
Schematics |
ArcScan |
ArcScan |
Business Analyst |
商业 |
适用于 Desktop 的 ArcGIS Data Interoperability 扩展模块 |
DataInteroperability |
ArcGIS Geostatistical Analyst 扩展模块 |
GeoStats |
适用于 Desktop 的 ArcGIS Workflow Manager 扩展模块 |
JTX |
ArcGIS Network Analyst 扩展模块 |
网络 |
Esri Aeronautical Solution |
Aeronautical |
Esri Defense Mapping |
国防 |
Esri Production Mapping |
Foundation |
适用于 Desktop 的 ArcGIS Data Reviewer 扩展模块 |
Datareviewer |
Esri Nautical Solution |
Nautical |
Esri Bathymetry | Nauticalb |
ArcGIS Spatial Analyst 扩展模块 |
空间 |
StreetMap |
StreetMap |
ArcGIS Tracking Analyst 扩展模块 |
Tracking |
产品编码名称
产品编码 |
---|
ArcView(等效于 ArcGIS for Desktop Basic 许可) |
ArcEditor(等效于 ArcGIS for Desktop Standard 许可) |
ArcInfo(等效于 ArcGIS for Desktop Advanced 许可) |
Engine |
EngineGeoDB |
ArcServer |
许可函数
功能 |
说明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CheckExtension(extension) |
检查是否存在可为特定类型的扩展模块检出的许可。
| ||||||||||||||||
CheckInExtension(extension) |
归还许可以便其他应用程序使用。
| ||||||||||||||||
CheckOutExtension(extension) |
获取许可。
| ||||||||||||||||
CheckProduct(code) |
检查请求的许可是否可用。
| ||||||||||||||||
ProductInfo() |
返回当前产品许可。
| ||||||||||||||||
SetProduct(code) |
定义 Desktop 许可。
|