FWScript 调用外部进程
在FWScript中,可以嵌入外部命令的执行,如执行某个dos命令,甚至执行一段python的脚本,或者调入python脚本程序执行。
使用系统正常启动的方式执行DOS、PowerShell、Python命令
BizRunner通过外部调用方式启动Dos、powershell与python窗口,然后通过指令,向该窗口中输入命令。
这种方式完全模拟在窗口中的命令执行
命令 | 描述 |
---|---|
rundos | 在DOS窗口中输入后面的命令,如果没有启动过dos窗口,则启动一个。 后面跟随要执行的命令字符串,当后面什么都没有的时候,则使用前面定义过的@的值,下同 |
rundosas | 启动一个dos窗口,使用后面的参数。如果当前已有一个dos窗口打开,则先关闭它 |
runshell runpowershell | 在PowerShell窗口中输入后面的命令,如果没有启动过powershell窗口,则启动一个 |
runshellas runpowershellas | 启动一个powershell窗口,使用后面的参数 |
runpython | 在python窗口中输入后面的命令,如果没有启动过python窗口,则启动一个 |
runpythonas | 启动一个python窗口,使用后面的参数 |
【在DOS窗口中,用户还可以通过键盘输入自己的命令,因此这个功能也可以实现跟用户的交互 】 注意: 使用后面跟"Exit"可以将窗口关掉
Example rundos dir @ = "c:\bizat\tools\toreboot\toreboot.exe -f rundos rundos exit
获取一个Window,然后模拟输入命令
通过界面的模拟,调出一个窗口,然后获取这个窗口,向这个窗口中输入各种命令
获取窗口的指令: fetchwindow 这个指令让bizrunner“记住”了这个窗口,后面的发送命令都是向这个窗口发送的 发送命令的指令: sendtowindow string 这个指令用于向“记住的窗口”发送命令字符串,如果后面为空,则发送预先定义的@变量的值 Example: // 使用win-x 打开菜单 <<x // 输入i,打开一般用户的powershell界面 < i // 将这个窗口当作当前窗口 getwindow // “记住”这个窗口 fetchwindow // 向这个窗口发送命令 @="dir\r" sendtowindow
启动一个Exe程序
代码 | 描述 |
---|---|
& command-line run command-line | 启动一个Exe程序,执行该命令行(后面紧跟其参数),无需等待其执行完成 |
&= command-line runwait command-line | 启动一个Exe程序,执行该命令行(后面紧跟其参数),一直等待其执行完成 |
&=ddd command-line runwaitddd command line | 启动一个Exe程序,执行该命令行(后面紧跟其参数),并等待其执行完成,ddd为最多等待的时间,以秒为单位,注意必须紧跟数字。如runwait10 c:\bizat\tool\3d.exe |
& run | 同上,只是将变量@的值作为command line,启动外部进程,无需等待其执行完成 |
&= runwait | 将变量@的值作为command line,启动外部进程,一直等待其执行完成 |
&= runwaitddd | 将变量@的值作为command line,并等待其执行完成,ddd为最多等待的时间,以秒为单位,注意必须紧跟数字 |
注意上述&= 之后的数字以及&&之后的数字(或者是setcmd,runwait),不能有空格,必须紧跟)
run 可用 exe、execute 代替
实例
启动Toreboot程序 $1 = "c:\bizat\tool\toreboot.exe" $2 = " -r -f" @ = $1 + $2 &
运行3D程序2分钟 $1 = "c:\bizat\tool\3d.exe" $2 = " -r -f" @ = $1 + $2 &=120
最终执行的是命令:c:\bizat\tool\toreboot.exe -r -f
调用解释型语言的解释器(如 DOS cmd,PowerShell,Python)
如果希望调用一段解释型语言脚本来执行,则使用大括号
- 指定脚本解释器
- 启动定义
- 脚本文件调用
- 特殊语句处理
指定解释器
指定处理多行指令的解释器,缺省为PowerShell,但可通过命令进行修改,而且可以指定参数。
代码 | 描述 |
---|---|
&&d | 设置执行的command, 后面所有的执行均使用这个cmd。d=1,2,3 分别代表已经预先定义的powershell,dos-cmd, python,如果是没有预先定义的的,直接在theStartCommand中进行指定对应的命令。注意数字d与==或setcmd之间不能有空格隔开 |
&&0 command and parameters setcmd or setexe or theStartCommand | 某个具体的解释器命令。该命令用于扩展,如果有非常特殊的解释器,则可以在这个地方说明,后面的脚本使用这个解释器解释。 |
&&1 parameters PowerShell | 采用PowerShell,后面是启动时的参数;或者直接使用关键字PowerShell,下同 |
&&2 parameters Dos | 采用cmd.exe,后面是启动时的参数 |
&&3 parameters Python | 采用Python,后面是相关的参数【使用的是IronPython】 |
启动定义:是否等待完成
代码 | 描述 | 脚本语言 |
---|---|---|
&{ 或 &{= | 启动脚本解释器执行,一直等待其执行完成 | PowerShell / Python |
&{& | 启动脚本解释器执行,无需等待其执行完成,可以看作是在后台运行 | PowerShell |
&{=ddd | 启动脚本解释器执行,并等待其执行完成,ddd为最多等待的时间 | |
&} | 脚本解释器执行结束 | PowerShell / Python |
避免方文宏的处理:特殊语句#&
有些脚本语言广泛使用#,如Powershell中使用一个#作为注释,而#在FWScript是当作宏来进行处理的,因此需要规避进行宏的处理。
使用特殊语句#&,告诉方文宏处理程序,在两个#&之间的语句就不会被FWMacro处理。
&{ #& Command line 1 Command line 2 #& &} 注意:如果使用了#/* 与 #*/,则在#&之间的内容不会被注释掉。
如果需要使用动态的字符串,则需使用预先定义的字符串,单独一行@即可。@出现在里面的任何一行,都会替换成前面的预定义字符串。
@=$cmd + “\n\r” + $2 &{ @ &}
脚本文件调用
如果已经有了脚本文件,需要直接执行,则可以直接使用如下命令。
代码 |
---|
&<FileName |
&=<FileName |
&=ddd<FileName |
变量传递
- 针对PowerShell,可以直接使用FWScripts的数字变量,在Powershell脚本中,可以直接使用$1 -- $9,在PowerShell脚本中,若对这些变量的值有所更改,则会直接反馈到FWScripts中。
- 针对Python,也可以直接使用FWScripts的数字变量,在IronPython脚本中,使用S1-S9代表$1-$9 【注意:Python中的变量不能以$开头,PowerShell的变量必须以$开头】,若在Python中对这些变量有所更改,则会直接反馈到FWScripts中。
输入输出
在外部脚本中,实现对BizAT中库调用FWScripts的输入输出:
PowerShell | Python |
---|---|
$Biz.Show(string) | Biz.Show(string) |
$Biz.Notify(int, string) | Biz.Notify(int, string) |
int $Biz.Check(string) | int Biz.Check(string) |
object $Biz.Ask(string) | object Biz.Ask(string) |
注意:Python中的变量不能以$开头
<< FWScript 函数 | FWMacro 方文宏 >> |