在 Python 中访问许可和扩展模块
每当在脚本中执行工具时,都会需要 ArcGIS Desktop 许可。此外,ArcGIS 扩展模块(如 ArcGIS Spatial Analyst)中的工具还需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcView 级别的许可,却试图运行需要 ArcEditor 或 ArcInfo 许可级别的工具,则工具将运行失败。
使用 ArcView 或 ArcEditor 级别的许可时,脚本应将产品设置为 ArcView 或 ArcEditor。同样,使用 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 产品许可设置为 ArcView 的级别,因为执行扩展模块中的工具时不需要 ArcInfo 许可。如果未明确设置 ArcView 许可并且没有可用的 ArcInfo 许可,则脚本将失败,因为运行扩展模块工具需要 Desktop 许可。
class LicenseError(Exception): pass # Set desktop license used to ArcView # 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 3D Analyst extension # arcpy.CheckInExtension("3D")
上例中,3D Analyst 扩展模块通过 finally 子句检入,从而确保无论是否出现异常都会检回该扩展模块。
返回值 Failed、Unavailable 或 NotLicensed 表示无法成功检出扩展模块。
以下是扩展模块名称及其扩展编码名称:
扩展模块 |
扩展编码 |
---|---|
3D Analyst |
3D |
ArcGIS Schematics |
Schematics |
ArcScan |
ArcScan |
Business Analyst |
Business |
Data Interoperability |
DataInteroperability |
Geostatistical Analyst |
GeoStats |
ArcGIS Workflow Manager |
JTX |
Network Analyst |
网络 |
Esri Aeronautical Solution |
Aeronautical |
Esri Defense Mapping |
Defense |
Esri Production Mapping |
Foundation |
ArcGIS Data Reviewer |
Datareviewer |
Esri Nautical Solution |
Nautical |
Spatial Analyst |
空间 |
StreetMap |
StreetMap |
Tracking Analyst |
Tracking |
产品编码名称
产品编码 |
---|
ArcInfo |
ArcEditor |
ArcView |
Engine |
EngineGeoDB |
ArcServer |
许可函数
功能 |
说明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CheckExtension(extension) |
检查是否存在可为特定类型的扩展模块检出的许可。
| ||||||||||||||||
CheckInExtension(extension) |
归还许可以便其他应用程序使用。
| ||||||||||||||||
CheckOutExtension(extension) |
获取许可。
| ||||||||||||||||
CheckProduct(code) |
检查请求的许可是否可用。
| ||||||||||||||||
ProductInfo() |
返回当前产品许可。
| ||||||||||||||||
SetProduct(code) |
定义 Desktop 许可。
|