运行一个tcl脚本的多个实例

时间:2015-03-09 19:46:55

标签: multithreading bash tcl expect multiple-instances

目前,我正在使用foreach命令从文件中读取主机名,并使用此主机名连接到设备。所有这些都是在我的TCL脚本中完成的。有没有办法可以运行脚本的多个实例,以便分别查询每个设备?像bash脚本类似于:

for hostname in file;
do
  log.tcl $hostname &
done

我认为这类似于多线程。 我的另一个问题是,当运行脚本的多个实例,并且每个脚本写入同一个文件时,所有日志都会混乱吗?

1 个答案:

答案 0 :(得分:1)

有几种选项可以存档:

1。为每个主机名执行脚本:

foreach hostname $hosts {
    exec log.tcl $hostname &
}

这就像bash解决方案。

2。使用线程

package require Thread
set pool [tpool::create]
set jobs {}
foreach hostname $hosts {
    lappend jobs [tpool::post -nowait $pool [list apply {{host} {
        set argv0 log.tcl
        set argv [list $host]
        source $argv0
    } $hostname]]
}
while {[llength $jobs]} {
     tpool::wait $pool $jobs jobs
}

请注意与线程不兼容。

关于从多个脚本写入同一文件的另一个问题:这取决于。如果您有符合POSIX标准的系统并使用a打开文件,那么它可能会有效。