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的输入输出:

PowerShellPython
$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 方文宏 >>