span8
斯潘4
在翻译之前和翻译之后控制FME的愿望已经讨论和争论了很多年。人们想在翻译开始前做不同的设置工作,以及在翻译结束后对日志文件或其他翻译工件的不同后处理。
最后这是可能的,以非常强大的方式处理前和后处理功能,提供在处理工作区之前和/或之后执行脚本的能力。脚本可以访问许多翻译工件(如counts,日志文件,等)。
可能性是巨大的;一些示例应用程序包括:
启动脚本在映射文件完全解析之后执行,打开日志文件后,但在读者开始处理之前。关闭脚本在写入程序完成处理并关闭日志文件后执行(或者在翻译错误终止的情况下,清除后,日志文件关闭)。
启动和关闭脚本可以是tcl或python。
FME有一个内置的TCL解释程序,因此无需进一步安装。
如果脚本包含过程定义,脚本必须调用它定义的过程,否则,将不会执行过程本身,也不会进行任何处理。
您可以直接在工作台中定义脚本导航窗格.Workbench甚至为编写脚本提供了一个特殊的编辑窗口。
上面:导航窗格中的tcl和python脚本指令。
上面:tcl结束脚本指令设置对话框。单击突出显示的按钮以打开脚本编辑器。
上面:脚本编辑器。
关闭python脚本可以利用导入FmeObjects.
对于tcl脚本,没有访问fmeobjects的权限,但是您可以通过“exec”命令(tcl)启动新的流程。这些新的过程可能涉及到FME对象TCL而没有任何冲突。
启动和关闭脚本是不在FDS(自定义格式)中有效。也有一些架构上的原因必须保持这种方式。
他们可以,当然,在映射文件或工作区中使用,该文件或工作区本身使用自定义格式。
可以在启动或关闭脚本中访问已发布的参数。
这个fme_宏值数组/字典保存这些(按宏名索引,值是实际值)–因此,在TCL中,您可以通过这样的行获得:
fme_end_tcl puts[数组名fme_macrovalues];
fme_begin_tcl放入$fme_macrovalues(destdataset);
在python中,你可以像其他字典一样访问它,例如,这样地:
对于name,fme_macrovalues.iteritems()中的val:logger.log(“%s:%s”%(name,val))。
所以,正如我祖父曾经说过的,我的许多发明,“这有什么好处?”爷爷,这有很多用途,这里有一些实例.
有关启动和关闭脚本中可用变量的完整列表,请参阅帮助:启动和关闭python脚本和启动和关闭TCL脚本.
将设置从启动传递到关闭
tcl启动和关闭脚本共享一个tcl解释器,这意味着启动脚本可以设置Tcl全局变量,这些变量稍后将可用于关闭脚本。
然而,该解释程序完全独立于FME中使用的任何其他TCL解释程序;所以,例如,不能将设置从@tcl和@tcl2 fme函数传递到关闭脚本。
如果[catch set outputfile[open c:/temp/log file.log rdwr creat excl]]puts stderr“错误-无法打开日志文件。”否则set gtranslationstarttime[时钟格式[时钟秒]]puts$outputfile“转换开始:$gtranslationstarttime close$outputfile另一方面,为了有目的地停止翻译,即使脚本不会导致错误,然后可以使用tcl“错误”命令强制fme停止处理,例如:
如果[文件存在$output filename]错误“输出文件已存在-请选择其他目标文件名。”python版本是:
import-osif os.path.exists(output filename):引发异常(“输出文件已存在-请选择其他目标文件名。)
fme_end_tcl exec fme.exe anothertranslation.fmw 2>nul:
一组完整的TCL示例可以在这里找到.
?2019安全亚搏在线软件公司|合法的