如何绕过 window shell (wish/tclsh) GUI 并改用终端?

How to bypass window shell (wish/tclsh) GUI and use terminal instead?

我有一个软件包,它有一个用 tclsh/wish 编写的非常笨重的 GUI。我想通过终端控制软件并制作一些脚本 运行 它。希望的 GUI 很长(超过 37000 行),所以我想避免详细阅读它并编写相应的命令行界面。假设我已经知道我要按下的按钮顺序和要填写的输入字段。有什么方法可以通过终端控制这个愿望 GUI 怪物吗?

通过以下方式调用 GUI:

exec wish -f $PROGRAM_PATH/program.tcl -n program wish $PROGRAM_PATH $*

即使我删除了 -f 标志,它也不会接受任何终端输入或显示 % 提示符。我不明白 -n 标志后面的部分。如果我删除它,程序 运行 是一样的。

即简单调用

wish $PROGRAM_PATH/program.tcl

做同样的事情。

我也尝试了 -file 标志并为外部文件提供命令,但希望在定义所有内部变量和例程之前尝试输入这些命令,因此导致命令无法识别。

谁能告诉我一些关于愿望脚本的有用资源?

如果您有一个程序 prog.tcl,它有一个输入字段 .e 和一个按钮 .b:

#!/usr/bin/tclsh

package require Tk

set e {}

proc dump { } {
  global e
  puts $e
}

ttk::label .l -text Entry:
ttk::entry .e -textvariable e
grid .l .e
ttk::button .b -text button -command dump
grid .b -column 2

您可以使用这样的脚本 运行 它:

#!/usr/bin/tclsh

package require Tk

source prog.tcl

set tv [.e cget -textvariable]
set $tv mydata
.b invoke
update

这只有在你有源的情况下才有效,看起来你有。

与其生成事件以在输入字段中输入数据,不如直接获取关联变量并将其设置为所需值要容易得多。按钮很简单。还有组合框(下拉菜单)、复选框、刻度和单选按钮可供使用。我将这些方法广泛用于我的自动化测试并且它有效。

您仍然需要阅读代码才能找到条目和按钮名称。

如果你在 Windows,你也可以试试 autohotkey 程序。