我可以使用tcl打开一个新的xterm并在该xterm上发送命令

时间:2016-05-20 06:05:40

标签: tcl expect xterm

我有一个奇怪的要求。我想使用tcl打开新的xterm并在该xterm上发送命令。我用谷歌搜索但无法得到任何东西

示例:我正在使用带有4个按钮的GUI。当我点击button1然后它将打开新的xterm并发送与该xterm上的button1相关的命令。

同样当我点击button2时,它会打开另一个xterm窗口,它将在新的xterm上发送与button2相关的表扬

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

是的,您可以使用xterm的-S选项执行此操作。 Don Libes有一个名为multixterm的例子,它使用了这个功能。这会向xterm发送字符。

关于按钮的侧面评论 - 必须使用tcl / tk界面中的按钮完成(从 xterm获取X事件会更加困难)。

进一步阅读:

答案 1 :(得分:0)

您可以做的是将一个临时的Expect脚本写入主文件中的一个文件,并在您的xterm中运行该临时脚本。如,

#! /usr/bin/env expect
package require Tk 8.5
package require fileutil ;# You need to have Tcllib installed for this.

proc action1 {} {
    set temp [::fileutil::tempfile]
    ::fileutil::writeFile $temp {
        # Delete the temporary file as soon as it has been read.
        file delete $argv0

        # Your Expect script for Action 1 follows here.
        puts {Hello from a new Expect process!}
        sleep 3
    }
    exec xterm -e expect -f $temp &
}

# Display the GUI.
grid \
    [::ttk::button .action1 -text {Action 1} -command action1] \
    [::ttk::button .quit -text Quit -command {exit 0}]

vwait forever

或者,您可以为每个命令设置预定义的非临时Expect脚本文件。您可以使用

以类似方式运行它
exec xterm -e expect -f action1.exp &

来自期待或tclsh