You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expect脚本中for循环如何实现步长为2的递增?

解决方法

错误原因

你之前修改split相关代码的思路是错误的:split命令的作用是将传入的字符串按分隔符拆分为列表,和循环步长完全无关,额外加的+1参数不符合split的语法规范,因此会触发报错。

正确实现

1. 仅调整循环步长为2(仅处理下标为0、2、4...的任务,串行执行)

只需修改for循环的第三段增量逻辑,将默认步长1改为2即可:

# 仅修改这一行即可,原有循环内逻辑保持不变
for { set index 0 } { $index < [llength $tarts] } { incr index 2 } {
    # 原有循环代码
}

2. 每次循环并行执行2个注册任务(同时处理index和index+1两个任务,提升执行效率)

如果需要同时跑两个任务,避免串行等待的耗时,可参考以下完整修正代码(同时修复了原代码中[lindex $tart $index]的逻辑错误,$tart已经是单个元素无需再次取值):

/usr/bin/expect << 'EOF2'
set tarts [split $env(Tarts)]
set ips [split $env(IPs)]

puts "Tarts to be updated: $tarts"
puts "IPs of Tarts: $ips"

for { set index 0 } { $index < [llength $tarts] } { incr index 2 } {
    puts "In Loop: $index, [expr {$index+1}]"
    # 启动第一个任务进程
    set tart1 [lindex $tarts $index]
    set ip1 [lindex $ips $index]
    spawn telnet $ip1 6187
    set pid1 $spawn_id

    # 若存在第二个任务则同步启动
    set pid2 ""
    if {$index+1 < [llength $tarts]} {
        set tart2 [lindex $tarts [expr {$index+1}]]
        set ip2 [lindex $ips [expr {$index+1}]]
        spawn telnet $ip2 6187
        set pid2 $spawn_id
    }

    set timeout -1
    # 处理第一个任务交互逻辑
    set spawn_id $pid1
    expect {
        "*traffic*" {
            puts "``````````````````````````````````````````````````````````````"
            puts "Registering Group1, Group2 of Tart#: $tart1"
            send "traffic map rate reg_group1 30000\r"
            send "traffic map rate reg_group2 30000\r"
            puts "wait 300 seconds .."
            send "traffic go\r"
            sleep 300
          
             sleep 2
            puts "``````````````````````````````````````````````````````````````"
            puts "Setting hold_time for 4kagents to 20000s"
            send "traffic map param 4kagents hold_time=20000\r"
            send "traffic map param 4kagents hold_time=20000\r"
            puts "wait 5 seconds .."
            sleep 5
            puts "``````````````````````````````````````````````````````````````"

            sleep 2
            puts "``````````````````````````````````````````````````````````````"
            puts "Logging in Agents using map 4kagents on Tart#: $tart1"
            send "traffic map param 4kagents 1\r"
            puts "wait 120 seconds .."
            sleep 120
            puts "``````````````````````````````````````````````````````````````"
        }
    }
    sleep 3
    send -- "^]"
    expect -exact "^\]\rtelnet> "
    send -- "close\r"
    expect eof

    # 处理第二个任务交互逻辑(如果存在)
    if {$pid2 ne ""} {
        set spawn_id $pid2
        expect {
            "*traffic*" {
                puts "``````````````````````````````````````````````````````````````"
                puts "Registering Group1, Group2 of Tart#: $tart2"
                send "traffic map rate reg_group1 30000\r"
                send "traffic map rate reg_group2 30000\r"
                puts "wait 300 seconds .."
                send "traffic go\r"
                sleep 300
              
                 sleep 2
                puts "``````````````````````````````````````````````````````````````"
                puts "Setting hold_time for 4kagents to 20000s"
                send "traffic map param 4kagents hold_time=20000\r"
                send "traffic map param 4kagents hold_time=20000\r"
                puts "wait 5 seconds .."
                sleep 5
                puts "``````````````````````````````````````````````````````````````"

                sleep 2
                puts "``````````````````````````````````````````````````````````````"
                puts "Logging in Agents using map 4kagents on Tart#: $tart2"
                send "traffic map param 4kagents 1\r"
                puts "wait 120 seconds .."
                sleep 120
                puts "``````````````````````````````````````````````````````````````"
            }
        }
        sleep 3
        send -- "^]"
        expect -exact "^\]\rtelnet> "
        send -- "close\r"
        expect eof
    }
}
EOF2

内容的提问来源于stack exchange,提问作者Asad Javed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:03