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

Running multiple instances of one tcl script

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

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

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

有几个选项可以存档:

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 打开文件,那么它可能会工作。