Tcl/Tk是一种编写小型GUI脚本的简单方法.
任何人都可以用按钮和文本小部件给出一个很好的例子.按下按钮时,应执行shell命令,并将输出传送到文本小部件.
如果您有其他有用的任务的漂亮和干净的示例,请添加它们.
我试图列出命名空间中的所有函数(警告 - 我对Tcl很新,所以我可能会对Tcl的部分使用错误的单词).例如,我有一个为我编译的tcl shell(如果这是用它来表达它的正确方法),我知道至少存在一个函数,让我们称它为
blah::do_something
Run Code Online (Sandbox Code Playgroud)
我知道在ruby中有一些方法可以列出模块/命名空间中的所有函数.我如何知道blahTcl 中命名空间中可用的其他功能?
提前致谢
我们可以用两种可能的方式来评估这两个表达式:
   set a 1
   set b 1
   puts [expr $a + $b ]
   puts [expr {$a + $b } ]
Run Code Online (Sandbox Code Playgroud)
但是为什么第一个讨厌有经验的Tclers,并认为这是不好的做法?第一次使用是否expr有一些安全问题?
我正在使用expect在我的服务器上启动一个应用程序:
#!/usr/bin/expect
set timeout -1
spawn "bin/start-all.sh"
expect {
    -re "Found MongoDB in" { send "y\r"; exp_continue }
    -re "Found Hadoop in" { send "y\r"; exp_continue }
    -re "Going to start Hadoop" { interact }
}
Run Code Online (Sandbox Code Playgroud)
我可以在脚本运行的几秒钟内访问我的服务器上的应用程序,但是一旦它结束,应用程序就会变得不可用.
我在调试模式下运行expect并在结束时获得以下输出:
expect: does "vendors area. Do you want to start it? [y/n] y\r\n" (spawn_id exp6) match regular expression "Found MongoDB in"? Gate "Found MongoDB in"? gate=no
"Found Hadoop in "? Gate "Found Hadoop in "? gate=no
"Going to start Hadoop"? Gate "Going to …Run Code Online (Sandbox Code Playgroud) 如何在每行末尾没有反斜杠的情况下列出多行中的值?
如果最后没有反斜杠,则无法在多行中创建列表.
例如,以下(错误)代码:
set pets [list 
    cat
    dog
    elephant
]
Run Code Online (Sandbox Code Playgroud)
给出错误:
invalid command name "cat"
    while executing
"cat"
    invoked from within
"set pets [list
        cat
        dog
        elephant
]"
Run Code Online (Sandbox Code Playgroud)
它可以通过在行尾添加反斜杠来修复:
set pets [list \
    cat \
    dog \
    elephant \
]
Run Code Online (Sandbox Code Playgroud)
这是丑陋的,容易出错.
请注意:
{&}),但它不允许执行命令并且还保留冗余的空格字符.dict create),不仅list如我的示例中那样.使用Tcl 8.5
我有一个主要的TCL过程,在其他文件夹和后续子目录中获取大量其他tcl过程.例如,在主程序中,它具有:
source $basepath/folderA/1A.tcl
source $basepath/folderA/2A.tcl
source $basepath/folderA/3A.tcl
source $basepath/folderB/1B.tcl
source $basepath/folderB/2B.tcl
source $basepath/folderB/3B.tcl
Run Code Online (Sandbox Code Playgroud)
当我总是知道我将在folderA和folderB中获取所有内容时,这样做似乎有点愚蠢.是否有一个函数(或简单的方法)允许我只是在整个文件夹中获取所有.tcl文件?
我正在寻找一种在Tcl中找到变量类型的方法.例如,如果我有变量$ a,我想知道它是否是一个整数.
到目前为止我一直在使用以下内容:
    if {[string is boolean $a]} {
    #do something
    }
Run Code Online (Sandbox Code Playgroud)
这似乎适用于以下类型:
alnum,alpha,ascii,boolean,control,digit,double,false,graph,integer,lower,print,punct,space,true,upper,wordchar,xdigit
但是它无法告诉我我的变量是否可能是数组,列表或字典.有谁知道如何判断一个变量是否是这三个中的任何一个?
如何将proc输出重定向到tcl中的文件,例如,我有一个proc foo,并希望将foo输出重定向到文件栏.但得到了这个结果
% proc foo {} { puts "hello world" }
% foo
hello world
% foo > bar
wrong # args: should be "foo"
Run Code Online (Sandbox Code Playgroud) tcl ×10
expect ×1
namespaces ×1
object-type ×1
scripting ×1
shell ×1
tk-toolkit ×1
unix ×1
variables ×1