Почему журнал при трассировке не работает при использовании его в процедуре в TCL / Expect - PullRequest
0 голосов
/ 20 января 2012

Приведенный ниже код не выводится в файл 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

Помощь

1 Ответ

2 голосов
/ 20 января 2012

Вероятно, этот блок верхнего уровня не может заменить то, что вы думаете.Это действительно неловкий код тоже.Вы можете передать переменную в известную вам функцию трассировки и избежать глобального и верхнего уровня.

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]
    ...
}
...