如何在同一个 tclsh window 中 运行 多个 TCL 脚本?
How to run multiple TCL scripts in same tclsh window?
描述
- 我使用 VBScript
- 来自 VBScript 我调用我的第一个 TCL 脚本 "name1"
- 脚本"name1"完成后,我继续使用VB脚本
- 在几个 VB 脚本函数之后,我调用了我的第二个 TCL 脚本 "name2",这个脚本是脚本 "name1" 的子进程。脚本 "name2" 必须使用脚本 "name1"
中的所有变量
当前结果
我的脚本 "name1" 和 "name2" 在不同的 tclsh windows 中执行
结果"name2"不熟悉"name1"
的变量
预期结果
"name1"和"name2"在同一个tclsh中执行window
评论
我尝试使用这些命令,但我不知道它在 VBScript
中的语法
Tcl_Create tcl处理程序,
TCL_Eval 状态,tclHandler,
如果有一个示例如何在VB脚本或任何其他
中使用这些命令会很好
谢谢
VB脚本:
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
dim shell
set shell=createobject("wscript.shell")
shell.run "tclsh e:\RunTCL\name1.tcl"
crt.Sleep 10000 ' or any VBScript commands
shell.run "tclsh e:\RunTCL\name2.tcl"
结束子
name1.tcl
包要求 SpirentTestCenter
设置 hProject [stc::创建项目]
设置 hTxPort [stc::create port -under $hProject -location //192.168.0.243/10/17 -useDefaultHost False]
name2.tcl
设置 hRxPort [stc::create port -under $hProject -location //192.168.0.243/10/25 -useDefaultHost False]
带有 tcl84.dll 的新代码及其命令 "TCL_Create tclHandler,":
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
Dim wscriptTCL
tclHandler = 0
set wscriptTCL =CreateObject("C:\Tcl\bin\tcl84.dll")
TCL_Create tclHandler, wscriptTCL, 1
puts "Importing STC API"
TCL_Eval Status, tclHandler, "package req SpirentTestCenter"
puts "Creating API objects set"
TCL_Eval Status, tclHandler, "set hProject [stc::create project]"
puts "Connecting to STC ports"
TCL_Eval Status, tclHandler, "set hTxPort [stc::create port -under $hProject -location //10.110.10.243/8/9 -useDefaultHost False]"
src.Sleep 100000
TCL_Eval Status, tclHandler, "set hRxPort [stc::create port -under $hProject -location //10.110.10.243/8/10 -useDefaultHost False]"
因此,我看到这条消息:Error:ActiveX 组件无法创建对象 'c:\tcl\bin\tcl84.dll'
我可以使用 2 个选项:
- 从我的 VB 脚本中调用 tcl 文件
- 通过 dll 从 VB 脚本调用 tcl 命令
但是没有人在工作
好消息,它开始工作了,但是,我更愿意通过 API
执行单独的 TCL 文件
shell.run "tclsh"
crt.Sleep 10000
shell.AppActivate "tclsh"
shell.SendKeys("TCL command")
tcl84.dll
不是提供 COM class 的东西。您不能像这样使用 VBScript CreateObject
调用创建 Tcl 解释器。 VBScript 没有直接从 DLL 访问导出函数的机制,因此您不能 运行 来自 VBScript 的 Tcl 代码,除非执行 tclsh
或 wish
进程。
每次执行 tclsh.exe scriptfile
都会创建一个新的子进程。它会 运行 你的脚本,但是当它退出时,进程被终止并且所有关于它的东西都会丢失,除非你读取标准输出或将信息写入文件以保存它。所以运行第二个脚本当然不知道第一个脚本。
将两个 tcl 脚本 运行 组合在一起的一种方法是创建一个脚本,该脚本使用 tcl source
命令将两个脚本加载到一个解释器中。另一种方法可能是读取第一个脚本的输出,解析出您需要的值并将它们作为命令行参数传递给第二个脚本。或者您可以让第一个脚本编写一个 tcl 命令文件,当在第二个进程中获取时,该文件将更新您需要的变量。
您的最后一个示例是创建单个进程并通过模拟击键进行通信。这真的很慢而且容易出错。有一个 winsend package that can let you send messages to tcl interpreters from vbscript. There might be some others as part of TWAPI
可以让你注册解释器以供外部访问。
描述
- 我使用 VBScript
- 来自 VBScript 我调用我的第一个 TCL 脚本 "name1"
- 脚本"name1"完成后,我继续使用VB脚本
- 在几个 VB 脚本函数之后,我调用了我的第二个 TCL 脚本 "name2",这个脚本是脚本 "name1" 的子进程。脚本 "name2" 必须使用脚本 "name1" 中的所有变量
当前结果
我的脚本 "name1" 和 "name2" 在不同的 tclsh windows 中执行 结果"name2"不熟悉"name1"
的变量预期结果
"name1"和"name2"在同一个tclsh中执行window
评论
我尝试使用这些命令,但我不知道它在 VBScript
中的语法Tcl_Create tcl处理程序, TCL_Eval 状态,tclHandler,
如果有一个示例如何在VB脚本或任何其他
中使用这些命令会很好谢谢
VB脚本:
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
dim shell
set shell=createobject("wscript.shell")
shell.run "tclsh e:\RunTCL\name1.tcl"
crt.Sleep 10000 ' or any VBScript commands
shell.run "tclsh e:\RunTCL\name2.tcl"
结束子
name1.tcl
包要求 SpirentTestCenter
设置 hProject [stc::创建项目]
设置 hTxPort [stc::create port -under $hProject -location //192.168.0.243/10/17 -useDefaultHost False]
name2.tcl
设置 hRxPort [stc::create port -under $hProject -location //192.168.0.243/10/25 -useDefaultHost False]
带有 tcl84.dll 的新代码及其命令 "TCL_Create tclHandler,":
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
Dim wscriptTCL
tclHandler = 0
set wscriptTCL =CreateObject("C:\Tcl\bin\tcl84.dll")
TCL_Create tclHandler, wscriptTCL, 1
puts "Importing STC API"
TCL_Eval Status, tclHandler, "package req SpirentTestCenter"
puts "Creating API objects set"
TCL_Eval Status, tclHandler, "set hProject [stc::create project]"
puts "Connecting to STC ports"
TCL_Eval Status, tclHandler, "set hTxPort [stc::create port -under $hProject -location //10.110.10.243/8/9 -useDefaultHost False]"
src.Sleep 100000
TCL_Eval Status, tclHandler, "set hRxPort [stc::create port -under $hProject -location //10.110.10.243/8/10 -useDefaultHost False]"
因此,我看到这条消息:Error:ActiveX 组件无法创建对象 'c:\tcl\bin\tcl84.dll'
我可以使用 2 个选项:
- 从我的 VB 脚本中调用 tcl 文件
- 通过 dll 从 VB 脚本调用 tcl 命令
但是没有人在工作
好消息,它开始工作了,但是,我更愿意通过 API
执行单独的 TCL 文件 shell.run "tclsh"
crt.Sleep 10000
shell.AppActivate "tclsh"
shell.SendKeys("TCL command")
tcl84.dll
不是提供 COM class 的东西。您不能像这样使用 VBScript CreateObject
调用创建 Tcl 解释器。 VBScript 没有直接从 DLL 访问导出函数的机制,因此您不能 运行 来自 VBScript 的 Tcl 代码,除非执行 tclsh
或 wish
进程。
每次执行 tclsh.exe scriptfile
都会创建一个新的子进程。它会 运行 你的脚本,但是当它退出时,进程被终止并且所有关于它的东西都会丢失,除非你读取标准输出或将信息写入文件以保存它。所以运行第二个脚本当然不知道第一个脚本。
将两个 tcl 脚本 运行 组合在一起的一种方法是创建一个脚本,该脚本使用 tcl source
命令将两个脚本加载到一个解释器中。另一种方法可能是读取第一个脚本的输出,解析出您需要的值并将它们作为命令行参数传递给第二个脚本。或者您可以让第一个脚本编写一个 tcl 命令文件,当在第二个进程中获取时,该文件将更新您需要的变量。
您的最后一个示例是创建单个进程并通过模拟击键进行通信。这真的很慢而且容易出错。有一个 winsend package that can let you send messages to tcl interpreters from vbscript. There might be some others as part of TWAPI
可以让你注册解释器以供外部访问。