如何绕过窗口shell(wish / tclsh)GUI并使用终端代替?

时间:2016-08-30 21:29:46

标签: shell scripting tcl tclsh

我有一个软件包,它有一个用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标志并使用命令提供外部文件,但是希望在定义所有内部变量和例程之前尝试输入这些命令,因此导致无法识别的命令。

有人能指出一些有关愿望脚本的有用资料吗?

1 个答案:

答案 0 :(得分:1)

如果你有一个程序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程序。