【问题标题】:Why does log by tracing not work when using it in a procedure in TCL/Expect为什么在 TCL/Expect 的过程中使用 log by tracking 不起作用
【发布时间】:2012-02-15 06:08:26
【问题描述】:

以下代码未按预期输出到 sample.log 文件。有什么原因吗? 可能与范围有关,但似乎无法弄清楚。

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

proc start_telnet {} {
 spawn telnet 10.30.16.112
 set logfile($spawn_id) [open sample.log w]
 trace variable expect_out(buffer) w log_by_tracing
 expect  "login"
 send "anonymous\r"


}

start_telnet

帮助

【问题讨论】:

    标签: linux automation tcl expect


    【解决方案1】:

    很可能上层区块无法替代您的想法。它的代码也很尴尬。您可以将变量传递给您知道的跟踪函数,并避免全局和上层。

    proc log {chan varname elt op} {
        upvar #0 $varname v
        puts -nonewline $chan "< $v(buffer)"
    }
    proc start_telnet {} {
        set log [open sample.log w]
        trace variable expect_out(buffer) w [list log $log]
        ...
    }
    

    【讨论】:

    • 这看起来不错,但是假设我正在与多个进程交互,并且我想同时记录他们的所有输出!可以这样做吗?
    • upvar 1 expect_out expect_out 可能会有所帮助; log 的父范围将是已设置的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2021-03-02
    • 2023-02-09
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多