使用tcl生成多个telnet并分别记录输出 [英] Spawn multiple telnet with tcl and log the output separately

查看:163
本文介绍了使用tcl生成多个telnet并分别记录输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用spawn&远程登录到多台服务器我想将每个文件的输出记录在单独的文件中. 如果我将spawn与'logfile'一起使用,则它正在登录到同一文件中.但我想在其他文件中使用它.这该怎么做?

I'm trying to telnet to multiple servers with spawn & i want to log the output of each in a separate files. If i use the spawn with 'logfile' then, it is logging into a same file. But i want to have it in different files. How to do this?

推荐答案

我已经从链接中找到了一些内容

I have found something from the link

http://www.highwind.se/?p=116

LogScript.tcl

LogScript.tcl

#!/usr/bin/tclsh8.5

package require Expect
proc log_by_trace {array element op} {
    uplevel {
        global logfile
        set file $logfile($expect_out(spawn_id))
        puts -nonewline $file $expect_out(buffer)
    }
}

array set spawns {}
array set logfile {}

# Spawn 1
spawn ./p1.sh
set spawns(one) $spawn_id
set logfile($spawn_id)  [open "./log1" w]

# Spawn 2
spawn ./p2.sh
set spawns(two) $spawn_id

set logfile($spawn_id)  [open "./log2" w]
trace add variable expect_out(buffer) write log_by_trace

proc flush_logs {} {
    global expect_out
    global spawns
    set timeout 1
    foreach {alias spawn_id} [array get spawns] {
        expect {
        -re ".+" {exp_continue -continue_timer}
        default {  }
        }
    }
}
exit -onexit flush_logs
set timeout 5
expect {
    -i $spawns(one) "P1:2" {puts "Spawn1 got 2"; exp_continue}
    -i $spawns(two) "P2:2" {puts "spawn2 got 2"; exp_continue}
}

p1.sh

#!/bin/bash
i=0

while sleep 1; do
    echo P1:$i
    let i++
done

p2.sh

#!/bin/bash
i=0

while sleep 1; do
    echo P2:$i
    let i++
done

它运行良好:)

这篇关于使用tcl生成多个telnet并分别记录输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆