span8号
斯潘4
本文是由5部分组成的系列文章的第5部分,旨在帮助您开始基本的Python和FME。本文将在Workbench中使用Shutdown python脚本功能,并包括使用Shutdown python脚本发送电子邮件转换统计信息的示例。使用文件格式的默认应用程序打开输出数据集,并写入翻译历史日志。
可以将python脚本添加到工作区,该工作区将在工作区完成时运行。例如,当工作区完成时,您可能希望将文件复制到某个地方,或者使用非数据检查器的应用程序打开输出数据集。
关闭脚本在所有变压器之后运行,读者,作家,并且日志文件在成功的转换中被关闭。如果翻译失败,脚本仍将执行,但可能只会失败FME.状态和故障信息保证包含有效值。
如帮助页所述启动和关闭脚本,不建议使用带有关闭脚本的FME对象python api中的任何模块,因为FME对象所需的资源不再可用,因此对api的调用将产生不可预知的结果。
然而,您可以使用与启动脚本相同的方式访问FME参数值,脚本化参数,和使用宏观价值观字典。shutdown python脚本还可以访问fme创建的一些全局变量,例如故障模式及后果分析,FME.特征写入,还有更多。此外,脚本可以访问启动python脚本中设置的任何全局python变量。有关全局变量的完整列表,请参阅启动和关闭python脚本的帮助页,在主题下福美特巨龙.
附加工作区:shutdownpython1.fmw
在这个例子中,我们在工作区中添加了一个shutdown python脚本,当工作区完成时,该脚本使用gmail发送电子邮件。如果愿意,可以编辑脚本以使用其他邮件服务器。电子邮件的主题将说明工作区是否成功,并包括编写的功能数量。也可以在的帮助页上找到类似的示例启动和关闭python脚本.也可以使用电邮者变压器。
打开关闭PythPython 1工作区(请参阅上面的下载部分)和导航器窗格中的工作区参数>脚本,您将看到一个名为关闭python脚本.您可以在这里输入或查看下面的python代码,该代码将使用gmail帐户发送电子邮件。
导航窗格中shutdown python脚本参数的位置
脚本导入SMTPLIB和FME模块,这使得电子邮件工具和访问FME字典分别。下一节检索用户设置的FME参数。然后脚本获取所编写的功能的数量,并将该数量转换为文本。if/else语句根据转换是否成功来确定要使用的消息文本。最后一部分讨论使用gmail smtp服务器发送电子邮件。
#smtplib提供了电子邮件工具simport smtplib,FME获取在工作区运行时设置的FME参数值to=FME.macrovalues['emailto']gmail_user=FME.macrovalues['gmail user']gmail_pwd=FME.macrovalues['password']subject=FME.macrovalues['successsubject']failsubject=FME.macrovalues['failsubject']emailfrom=FME.macrovalues['emailfrom']获取功能数fme wrotefeaturesWriten=str(fme.features written)如果fme失败,则更改主题fme u状态指示fme是否成功status=fme.status if status==0:subject=failsubject message='工作区失败'否则:message='工作区成功写入以下功能:'+features written使用gmail smtp服务器发送电子邮件您可以n编辑此行以使用您自己的电子邮件服务器smtpserver=smtplib.smtp(“smtp.gmail.com”,587)smtpserver.ehlo()smtpserver.starttls()smtpserver.ehlo()smtpserver.login(gmail_user,gmail_pwd)header='到:'+到+'\n'+'来自:'+emailFrom+'\n'+'主题:'+Subject+'\n'print headermsg=header+'\n'+message+'\n\n'smtpserver.sendmail(gmail_用户,去,msg)打印“完成!”smtpserver.close()。
有两个要点需要注意:
a.我们正在使用宏观价值观字典的方式与Startuppython脚本和脚本参数文章中的示例相同。例如,当运行工作区时,可以设置gmail用户名,并通过如下发布的参数访问该用户名:宏观价值观.
B.其次,注意,我们使用两个全局变量FME模块:FME.特征写入它是一个按功能类型索引的python字典,和FME.状态它是一个布尔值,告诉我们工作区是成功还是失败。
使用运行工作区文件>提示运行或者选择提示和运行按钮,然后是运行按钮。将出现“转换参数”对话框。填写适当的参数。您需要自己的gmail帐户用户名(电子邮件地址)**和密码,以及一个发件人电子邮件地址,该地址应与用户名相同。也,填写“收件人”电子邮件地址(可以与“发件人”电子邮件地址相同)和“失败和成功”主题行。在附加的示例工作区中,fail参数用于通过向终结器变压器发送特性来模拟工作区故障。单击“确定”发送。
**注:如果您的gmail帐户启用了双因素身份验证,您可能需要生成与Gmail帐户关联的应用程序密码。登录您的Gmail帐户,您将在“我的帐户>登录和安全”下找到一个生成应用程序密码的页面。一旦你生成了一个,运行工作区时,请输入应用程序密码作为密码。如果使用普通密码,python脚本可能无法执行,并显示消息“用户名和密码不被接受”。
有关使用gmail时身份验证问题的详细信息,请参阅以下两篇知识中心文章:
shutdownpython1.fmw的“转换参数”对话框
您(或您的收件人)将很快收到关闭python脚本发送的电子邮件。如果为fail参数选择“no”,则应如下所示:
关机脚本发送的成功翻译电子邮件示例
或者,如果为fail参数选择“是”:
关机脚本发送的失败翻译电子邮件示例
附加工作区:shutdownpython2.fmwt
工作台,用户可以选择重定向写入数据检查器的数据集。然而,如果用户希望使用数据的默认应用程序自动打开目标数据集,该怎么办?可以使用shutdown python脚本来执行此操作。
在这个例子中,翻译完成后,我们使用shutdown python脚本打开一个csv文件。为此示例选择了一个csv文件,因为它是大多数用户都可以打开的文件格式。但是,您应该能够使用该格式的默认应用程序使用该脚本打开其他文件格式。
正常开放关闭python2.fmwt.工作区非常简单。它从一个csv文件中读取温哥华市内的单个树数据。安属性管理器用于删除任何不需要的属性。安聚合器用于计算一个街区的树木数量,以及一个街区所有树木的平均高度和直径。输出被写成一个csv文件。
shutdownpython2.fmwt的工作区,用于从csv读取树数据,按邻域聚合数据并以csv格式写入输出。
关闭脚本用于打开输出csv文件,并在计算机上设置默认应用程序。在导航窗格中,去工作区参数>脚本>关闭python脚本若要使用自己的数据创建工作区,请在下面查看或复制脚本。
导入子进程,FMEWindows 64位上常见csv默认应用程序的系统路径r“C:\Program Files(x86)\Microsoft Office\Office15\Excel.exe”r“C:\Program Files(x86)\Notepad++\Notepad++.exe“R”C:\Windows\System32\Notepad.exe”使用fme的宏值字典获取outputDir=fme.macro values的目录位置['DestDataset_CSv2']使用fme的宏values dictionary to get output file name output name=fme.macrovalues['csv_file_name']append directory and file name to get file path of output file output path='\'。格式(outputdir,输出名称,'csv')用于调试的打印功能打印(outputpath)使用子进程模块打开具有默认应用程序的输出文件尝试:使用shell=false,您应该指定默认应用程序的完整文件路径,并输出文件取消注释下面的行,添加适用的文件路径,并注释出包含shell=true的行。#p=子进程.popen([““,“ “shell=false)p=subprocess.popen([outputpath],shell=true)print(“output csv file successfully opened”),但e:print(“shutdown script failed”)除外。错误:“,e)
脚本相对简单。使用子过程以及FME模块,脚本查找并创建一个包含输出数据集的文件路径的变量。此变量用于子过程模块的popen构造函数,用于创建一个子进程,该进程使用格式的默认应用程序打开输出数据集。
使用了popen构造函数而不是子进程.call())因为呼叫()将使用与翻译引擎(fme.exe)相同的过程,这意味着直到用户关闭用于打开输出数据集的应用程序,您的转换才会完成。作为PONEN()构造函数创建子进程,翻译后可以关闭fme.exe,在关闭打开的应用程序之前,工作区不会挂起。
重要注意事项使用壳牌=真的参数波本通常不建议使用构造函数,因为这会使程序容易受到shell注入的攻击,如果与不受信任的输入结合使用,则可能会造成安全隐患。更多信息,请参见下面的官方python文档:python popen构造函数.这个壳牌=真参数用于简化,因为它不需要指定应用程序路径。在这种情况下,由于工作区用户负责命令的输入,它对安全危害较小。然而,自担风险使用.
如果你想用壳牌=假作为论据,取消对以下行的注释:
p=子进程.popen([““,“ “外壳=假)
替换
确保快速运行已启用并运行工作区。输入参数或保留为默认值。6项功能应写入输出csv文件。设置为计算机上csv文件格式默认值的应用程序应该自动启动,并且您应该能够查看和编辑输出csv文件。
翻译日志窗格中的消息,表示输出csv文件已成功打开。如果无法打开csv文件,将显示一条错误消息。
演示关闭python脚本的行为。请注意,当工作区完成时,Microsoft Excel将打开输出csv文件。
附加工作区:shutdownpython3.fmw
如果工作区多次运行或按计划运行,用户如何跟踪翻译(例如:如图所示批处理方法1:命令行或批处理文件文章)?当然,如果在Workbench中选择了“附加到日志”选项,则可以查看日志文件。(有关日志文档,请参阅此处)或者,如果指定了要在批处理文件中创建的日志历史记录。但另一种选择是使用shutdown python脚本为特定工作区创建翻译历史日志。
在这个例子中,shutdown脚本将创建或附加到具有用户可能感兴趣的属性的csv日志,例如翻译状态,翻译日期和时间,读写功能,翻译花了多长时间,等。要做到这一点,脚本利用了FME模块的全局变量。
打开附加的工作区(关闭python3.fmw-请参阅上面的下载部分)。工作区非常简单,包含一个Sentinel2阅读器,测试仪,土拨鼠作家和终结者。此工作区将检索与读者标准匹配的最新图像,并将图像写为geotiff光栅。
一个非常简单的工作区,演示如何使用shutdown python脚本创建翻译历史日志。
在导航器窗格中的工作区参数>脚本,您将看到一个名为关闭python脚本.双击可打开“脚本编辑器”窗口。如果您正在创建自己的工作区,复制并粘贴下面的python代码,该代码将创建翻译历史日志或附加翻译详细信息。
#导入模块导入FME,猪瘟病毒datetimefrom os import path get current date and timedatetitoday=date time.date.today().strftime('%y/%m/%d')time now=date time.date time.now().time().strftime('%h.%m.%s')获取工作区的目录路径将后斜杠替换为前斜杠,以避免转义字符issuesworkspace=fme.macrovalues['fme_mf_dir']workspace=workspacepath.replace('\','/')获取工作区名称workspace name=fme.macrovalues['工作区名称']为主文件创建文件路径master file='.csv'。格式(workspacenpath,workspacename)尝试:如果主文件已经存在,如果path.exists(masterfile)==true,则打开并附加fo文件:使用open(masterfile,“ab”)作为csvfile:writer=csv.writer(csvfile,分隔符=“,”,QuoteCar=“'”,报价=csv.quote_minimal)如果翻译状态成功,如果fme.status==true:writer.writeRow([日期今天,现在开始,FME.状态,故障信息,时间流逝,fme.总特性读取,fme.记录的总特性,如果翻译状态不成功,只写状态和失败消息,否则:writer.writerow([今天日期,现在开始,FME.状态,如果主文件不存在,打开并写入文件其他:打开(主文件,“wb”)作为csvfile:创建csv writer writer=csv.writer(csvfile,分隔符=“,”,QuoteCar=“'”,报价=csv.quote_minimal)写入标题行writer.write row(['日期',“时间”'翻译状态','故障消息','翻译时间','totalfeaturesread','总功能写入','logfilename'])如果翻译状态成功,如果fme.status==true:writer.writeRow([日期今天,现在开始,FME.状态,故障信息,时间流逝,fme.总特性读取,fme.记录的总特性,如果翻译状态不成功,只写状态和失败消息,否则:writer.writerow([今天日期,现在开始,FME.状态,除了e:print(“写入翻译历史失败”)print(“错误:”,e)
为简单起见,翻译历史记录日志将创建在与工作区相同的文件夹中,并且与工作区同名。脚本使用宏观价值观字典,获取包含工作区的文件夹的路径以及包含宏的工作区名称(预定义参数)'fme_mf_dir'和'工作区名称'为翻译历史文件创建文件路径。
实际创造,csv文件的写入/追加由嵌套的如果/其他声明。第一如果/其他检查翻译历史文件是否存在存在性().如果以前没有运行工作区,没有翻译历史记录日志(存在性()将假)。将使用内置的python函数open()打开csv日志,方法是写入二进制文件('白')模式。
然后脚本将写入两行:第一行,标题行,因为此行不存在,其次,包含翻译详细信息的行。使用全局变量(如失效模式与后果分析时间,FME.总特性写入,故障模式与影响总特性读取,等。完整的列表FME可用于python关闭脚本的函数和变量,请参见下面文档部分的fme_end_python。
如果以前运行过工作区,翻译历史文件已经存在,因此二进制追加模式('AB型“)被使用。append将写入文件结尾,这意味着前面的行不会被覆盖和丢失。此外,将另一个标题行写入文件是没有意义的,因为已经存在一个标题行,所以只需要编写翻译细节行。
第二如果/其他语句检查翻译状态FME.状态变量。记得,如果翻译失败,只有FME.状态和故障信息保证包含有效值。为了避免使用无效值的潜在问题,如果FME.状态不是真(I.转换失败),只有日期,时间,翻译状态,并编写故障信息。
运行工作区,为输入“否”终止转换参数,并输入要在其中写入输出的位置。该功能通过通过测试仪端口。工作区完成后,转到保存工作区的文件夹。您应该看到一个与工作区同名的csv文件(关闭python3.csv对于这个例子)。打开文件。应该有两行:标题和包含刚完成翻译的详细信息的行。关闭csv文件。
工作区成功运行后翻译历史记录日志的显示方式。
返回工作区。再次运行工作区,但为选择“是”终止转换参数。这次,当特性通过时,由于终止符,转换应该失败。失败测试仪端口。
通过将特征定向到终端变压器来强制转换失败.
打开翻译历史文件。应该有第三行只包含日期,时间,翻译状态,以及故障信息。
翻译历史记录日志的最后一行在翻译失败后只应包含四个值。
现在,您可以使用.bat文件(或等效操作系统)运行工作区,任务调度程序,甚至可以通过工作台手动进行,并在一个易于搜索的文件中记录工作区的每个翻译。
有关更复杂的关闭python示例,请参阅以下文章:
使用FME的工作亚搏在线流程示例,python和oracle
要访问Workbench中启动和关闭脚本的帮助,从菜单栏打开“帮助”,在搜索栏中输入关键字“python”,然后选择适当的条目,或转到:
有关可用于关闭python脚本的FME变量和函数的完整列表,请转到:福美特巨龙
您可以在这里找到python FME对象API的完整文档:fme对象python api
此处使用的数据源于温哥华市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。
?2019安全亚搏在线软件公司|法律