Python在FME中的使用(一)——启动和关闭Python脚本
原文发布时间:2011-08-19
作者:毛毛虫
在FME中,Python的使用在前面的博客中我们也有介绍。这里再说一下一些常用用法。主要包括: FME中Python使用,包括使用简介,连接Oracle数据库、引入arcgis中python处理地理数据的模块(arcgisscripting 或arcpy)等的简单用法。首先说一下FME中Python的简单用法。
一、关于帮助文档
我们可以参考下FME提供的Python编程的参考资料,Safe公司给我们提供了自学资料ftp://ftp.safe.com/fme/pyfme/OliversCorner.zip。如果安装过程中选择了安装SDK,可以在FME的安装目录下,找到下面的文件夹:\fmeobjects\python\apidoc,这个文件夹中的内容如下:
里面有关于FME所使用的Python所有类和变量的详细说明。
二、关于pyfme
pyfme 是FME Objects API 的Python封装模块,它扮演了两个重要角色:
1)它允许Python开发者可以创建嵌入到FME技术中的Python应用程序。
2)作为一个FME和由@Python函数与PythonFactory使用的脚本的接口。
任何FME用户想要在FME转换中使用Python,需要熟悉pyfme模块,特别需要注意FMEFeature和FMELogfile这两个类,它们是经常用到的。
首先,要了解在FME workbench中,有四个地方可以进行Python脚本的编写,其中两个是与@Python函数相关的两个FME的转换器是PythonCaller and PythonCreator,另外的两个是在导航面板的Advanced中,启动和关闭的python脚本,如下图:
本节先说一下启动和关闭的python脚本的用法。
我们想要在转换开始执行前做一些其他操作,并在完成转换后进行日志文件的后处理或其他转换操作就要用到启动和关闭脚本。Startup 和 Shutdown脚本是提供在工作空间处理之前或之后执行脚本的一个强大的方法,这些脚本可以进行很多转换操作,如:
自定义日志(到一个文件或数据库);网站特定的事件日志;后处理重命名,移动或复制文件;源和目标数据集的预处理测试。
运行脚本的时间:Startup脚本在映射文件完成解析,日志打开但是读模块在开始处理之前执行。Shutdown脚本在写模块完成了处理并且日志关闭(或转换错误结束,完成清楚并关闭了日志文件)后执行。
支持的脚本:启动和关闭脚本可以是Tcl或Python。
FME有一个内置的解译器,所以不需要进一步安装。
脚本中使用FME对象:Startup 和 Shutdown脚本不能使用FME对象。因为在转换的开始/结束时间使用FME对象可能会一起FME转换系统的配置冲突。不过,在通过”exec”命令(Tcl)启动一个新的处理,这些处理可以包含FME对象Tcl ,没有任何冲突。
FME定义了一些全局变量,下面是可以用于启动或关闭脚本的全局变量。
启动脚本中可能用到的全局变量包括:
FME_MappingFileId 是在映射文件中指定的MAPPING_FILE_ID指令的值。
FME_LogFileName 转换中使用的日志文件的名称,如果没有使用日志文件,是空白值。
FME_MacroValues 可以用户访问发布参数。
关闭脚本中可能用的的全局变量包括:
FME_Status True表示转换失败,False表示成功。
FME_FailureMessage 如果转换失败是失败的信息,转换成功则是空白。
FME_TotalFeaturesRead 读入的要素的总的数目。
FME_TotalFeaturesWritten 被写入要素的总的数目。
FME_TotalCoordinates 输出的总的坐标数目
FME_MappingFileId 如果在映射文件中指定了,指的是MAPPING_FILE_ID键的值。
例如,我在启动脚本中输入下列的代码:
print “log filename is “+FME_LogFileName
在关闭脚本中输入下面的代码:
print FME_Status
print FME_LogFileName
print FME_FailureMessage
print FME_TotalFeaturesWritten
在模板中使用Creator转换器生成十个点写入到Shape文件中,执行后,在日志的最后几段中会看到打印出来的启动和关闭脚本中的相关信息:
log filename is C:\Users\Administrator\Desktop\fmeserver.log
True
C:\Users\Administrator\Desktop\fmeserver.log
10
因为转换成功,所以FME_FailureMessage 为空白信息。
另外还可以在启动或关闭脚本中调用发布参数,具体使用全局变量FME_MacroValues 来实现,例如:
在模板中定义了一个名为name的发布参数,值为1,如图:
在脚本中输入:
print FME_MacroValues[‘name’]
则会在日志中打印出1:
用这种方法可以启动或关闭脚本中调用发布参数进行相关操作。
待续………………
转载自:https://blog.csdn.net/fmechina/article/details/81160169