【问题标题】:Parallel processing in ExpectExpect 中的并行处理
【发布时间】:2012-06-18 02:00:25
【问题描述】:

下面的代码现在运行良好;但是,它是串行执行的。我希望能够滚动 source_list 文件,直到我获得最大数量的会话并让它们全部完成并将结果反馈给这个父脚本。这是可能的还是需要我更改我正在调用的脚本以反馈结果?我已经查看了 fork 命令,但它有点难以理解。

set source_list [lindex $argv 0]

set device_list [open $source_list r]
while {[gets $device_list ipaddress] != -1} {
spawn "./ios-upgrade.exp" 0 $ipaddress username password image-file MD5hash ftp-server
expect eof
}
close $device_list

【问题讨论】:

  • 有没有一种简单的方法可以将您的source_list 文件以最有意义的方式拆分为多个部分? (例如,split -l 是否可以拆分您的输入文件?)
  • 我的输入文件实际上只是一个 IP 地址列表。所以我只是循环将其提供给脚本。
  • 您还有问题吗,或者这是否解决了您的问题?
  • 将我的问题发布在您建议的答案下方,关于传递给被调用脚本的参数顺序。

标签: tcl expect


【解决方案1】:

你真正需要的是:

exec ./ios-upgrade.exp 0 $ipaddress username password image-file MD5hash ftp-server &
## No need for an expect statement here since you didn't spawn...

exec 末尾的 & 字符使 shell 中的脚本成为背景,因此您的循环不会因返回代码而被阻塞。

但是,您将用户名和密码作为 CLI args 发送,因此当有人执行 ps auxw 或类似操作时,它们也会显示在进程表中。我会将用户名/密码与您的 IP 地址存储在同一个文件中,然后使用:

exec ./ios-upgrade.exp 0 $ipaddress image-file MD5hash ftp-server &
## No need for an expect statement here since you didn't spawn...

ios-upgrade.exp 完成后,让它编写一个类似ip_4_1_12_18.out 的文件并遍历目录,直到您收到所有 IP 地址的状态。


OP的附加信息:

原来上述答案中缺少的信息是评估变量,以便正确传递。

exec ./ios-upgrade.exp 0 {*}$ipaddress image-file MD5hash ftp-server &

*请注意,{*} 仅适用于 TCL 8.5 及更高版本。

在下面找到答案:How to add a variable amount of arguments to exec in tcl?

【讨论】:

  • 我正在尝试将用户名和密码存储在同一个列表中。然而问题是它读取了整行并且没有以正确的顺序将变量输出以供调用的脚本执行。请参阅下面的输出:通过以下文件: 192.168.1.2 testuser testpassword spawn ssh test.txt@192.168.1.2 testuser testpassword 无论出于何种原因,它正在执行 0 image-file "result of gets" 它应该执行 0 "result of gets " 图像文件 MD5hash ftp-server
  • 给了我一个好的开始。我将发布一个关于变量替换的后续问题。
【解决方案2】:

原来上述答案中缺少的信息是评估变量,以便正确传递。

exec ./ios-upgrade.exp 0 {*}$ipaddress image-file MD5hash ftp-server &

*请注意,{*} 仅适用于 TCL 8.5 及更高版本。

在下面找到答案:How to add a variable amount of arguments to exec in tcl?

【讨论】:

  • 鉴于我所说的关于评估和背景任务的内容,我正在摸不着头脑,为什么我的答案没有被选中
  • @MikePennington 我正在查看您在下面发布的答案,这是让我到达那里的 90%,但您似乎没有提到 eval 或 {*}。如果您不介意我编辑您的答案以包含上述一些信息以使其更完整,我将很乐意接受您的答案。
  • execeval 应该可以工作。我无权访问您的脚本,因此无法完全审查所有问题。我在回答中包含了您的编辑。感谢您将其视为一种选择。
猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 2013-01-27
  • 2012-06-14
  • 2013-01-05
相关资源
最近更新 更多