标签: tcl

如何在其他tcl脚本中运行tcl脚本?

我有两个tcl脚本.我想在第一次完成时运行第二个脚本.我该怎么做?

tcl

12
推荐指数
3
解决办法
3万
查看次数

Tcl/Tk的例子?

Tcl/Tk是一种编写小型GUI脚本的简单方法.

任何人都可以用按钮文本小部件给出一个很好的例子.按下按钮时,应执行shell命令,并将输出传送到文本小部件.

如果您有其他有用的任务的漂亮和干净的示例,请添加它们.

scripting user-interface tk-toolkit tcl

11
推荐指数
1
解决办法
1万
查看次数

Tcl问题 - 如何在命名空间中列出函数

我试图列出命名空间中的所有函数(警告 - 我对Tcl很新,所以我可能会对Tcl的部分使用错误的单词).例如,我有一个为我编译的tcl shell(如果这是用它来表达它的正确方法),我知道至少存在一个函数,让我们称它为

blah::do_something
Run Code Online (Sandbox Code Playgroud)

我知道在ruby中有一些方法可以列出模块/命名空间中的所有函数.我如何知道blahTcl 中命名空间中可用的其他功能?

提前致谢

namespaces tcl

11
推荐指数
1
解决办法
3327
查看次数

为什么Tcler建议支持你的`expr`essions?

我们可以用两种可能的方式来评估这两个表达式:

   set a 1
   set b 1
   puts [expr $a + $b ]
   puts [expr {$a + $b } ]
Run Code Online (Sandbox Code Playgroud)

但是为什么第一个讨厌有经验的Tclers,并认为这是不好的做法?第一次使用是否expr有一些安全问题?

tcl

11
推荐指数
2
解决办法
1043
查看次数

背景催生了Expect的过程

我正在使用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)

unix shell tcl expect background-process

11
推荐指数
1
解决办法
6843
查看次数

整齐地列出多行的值

如何在每行末尾没有反斜杠的情况下列出多行中的值?

如果最后没有反斜杠,则无法在多行中创建列表.
例如,以下(错误)代码:

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

11
推荐指数
1
解决办法
9635
查看次数

如何获取当前脚本的路径?

有时需要获取脚本的当前路径.有什么方法可以做到这一点?

tcl

11
推荐指数
2
解决办法
1万
查看次数

TCL:递归搜索子目录以获取所有.tcl文件

我有一个主要的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

10
推荐指数
3
解决办法
2万
查看次数

确定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

但是它无法告诉我我的变量是否可能是数组,列表或字典.有谁知道如何判断一个变量是否是这三个中的任何一个?

variables tcl object-type

10
推荐指数
3
解决办法
3万
查看次数

如何将stdout重定向到tcl中的文件

如何将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
推荐指数
3
解决办法
3万
查看次数