2013-08-05 2 views
0

Я получаю сообщение об ошибке «can't set "::exp::winnt_debug": parent namespace doesn't exist», когда я пытаюсь запустить сценарий ожидания, используя реализацию C для интерпретатора ожидающих ожиданий в Windows (expect543.dll). Однако тот же скрипт работает отлично, если я запустить его с помощью команды ActiveState tclsh ...exp :: winnt_debug parent namespace error

Заявление «set ::exp::winnt_debug 1» в сценарии является причиной ошибки. Любая идея, какова может быть причина и как ее решить?

Вы можете найти код ниже

package require Expect 
set ::exp::winnt_debug 1 
set prompt "R4#" 
set more " --More--" 
expect -timeout 10 "$prompt" 
set output [open result.txt "w"] 
set running 1 
spawn plink -telnet "144.21.12.45" -P 2004 
send "enable\r" 
send "\r" 
send "show running-config\r" 
send "\r" 
while { $running > 0 } { 
expect { 
    "\n" { puts -nonewline $output "$expect_out(buffer)" } 
    "$more" {send " "} 
    "lines *-* " { send " " } 
    #"$prompt" { set running 0 } 
    eof  { set running 0 } 
    timeout  { set running 0 } 
} 

} 
puts "output is .." 
+0

Как вы активируете код ожидания? 'package require'? 'Load'? –

+0

Я активировал его, используя команду «package require expect». Добавьте код для справки. –

ответ

0

Там может быть несколько реализаций Ожидать для Windows (в отличие от версии Unix, которая была стабильной в течение веков), и это звучит как детали того, как они реализуются внутри между ними довольно много. Это не особенно удивительно. Кроме того, переменная ::exp::winnt_debug является абсолютно внутренней для конкретной реализации.

Непосредственным исправление изменить строку с ошибкой в ​​этом:

catch {set ::exp::winnt_debug 1} 

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

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