如何绕过windowshell(wish/tclsh)GUI而使用终端?

如何绕过windowshell(wish/tclsh)GUI而使用终端?,shell,scripting,tcl,tclsh,Shell,Scripting,Tcl,Tclsh,我有一个软件包,它有一个用tclsh/wish编写的非常麻烦的GUI。我想通过终端控制软件,并制作一些脚本来运行它。wish GUI相当长(超过37000行),因此我希望避免详细阅读它,并编写相应的命令行界面。假设我已经知道要按下的按钮顺序和要填充的输入字段。有没有办法通过终端控制这个愿望GUI怪物 GUI通过以下方式调用: exec wish -f $PROGRAM_PATH/program.tcl -n program wish $PROGRAM_PATH $* 即使我删除-f标志,它也不

我有一个软件包,它有一个用tclsh/wish编写的非常麻烦的GUI。我想通过终端控制软件,并制作一些脚本来运行它。wish GUI相当长(超过37000行),因此我希望避免详细阅读它,并编写相应的命令行界面。假设我已经知道要按下的按钮顺序和要填充的输入字段。有没有办法通过终端控制这个愿望GUI怪物

GUI通过以下方式调用:

exec wish -f $PROGRAM_PATH/program.tcl -n program wish $PROGRAM_PATH $*
即使我删除-f标志,它也不会接受任何终端输入或显示%提示。我不明白-n标志后面的部分。如果我将其删除,程序运行相同

i、 e.简单地打电话

wish $PROGRAM_PATH/program.tcl
做同样的事情

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


有人能给我指出一些关于wish脚本的有用来源吗?

如果你有一个程序
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,您也可以尝试自动热键程序。

完美,正是我想要的。非常感谢。下面是一个问题:是否可以不显示GUI而只执行命令?这样我就不需要X转发了。我想在不直接登录到计算节点的计算机集群上使用这个程序,我不这么认为。也许可以使用虚拟X显示器(Xvfb)。