2013-08-05 3 views
0

Windows에서 expect interpreter의 C 구현을 사용하여 expect 스크립트를 실행하려고하면 "can't set "::exp::winnt_debug": parent namespace doesn't exist"오류가 발생합니다 (expect543.dll). 내가 ActiveState의 명령을 통해 tclsh를 실행하면 동일한 스크립트가 잘 작동하지만 ...exp :: winnt_debug 상위 네임 스페이스 오류

스크립트의 문 "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

Expect 코드를 어떻게 활성화하나요? '패키지 필요'? '로드'? –

+0

"package require expect"명령을 사용하여 활성화했습니다. 참조 용 코드를 추가했습니다. –

답변

0

이 (연령대 안정적이었다 유닉스 버전과 달리) Windows 용 기대의 여러 구현하고 그들이 내부적으로 구현하는 방법의 세부 사항처럼 들린다 수 있습니다 그 (것)들의 사이에서 확실히 조금 변화한다. 특히 놀라운 것은 아닙니다. 또한, 변수 ::exp::winnt_debug은 특정 구현에 대해입니다.

즉각적인 수정이에 오류가있는 라인을 변경하는 것입니다 : 그런

catch {set ::exp::winnt_debug 1} 

, 실패하면, 그것은 자동으로 실패하고 실행할 수있는 프로그램의 나머지가 발생하지 않습니다.

더 일반적으로 ActiveState 빌드를 사용하거나 올바른 방법으로 함께 패키지를 작성하거나 중요한 의존성이 있는지 확인하는 방법으로 작업하거나 중지하십시오. 그것의 내부 특징을 참조하십시오. 어느 누구도 패키지를 구현하겠다는 약속을 한 적이 없기 때문에 패키지를 구현하는 과정에서 손가락을 찌르는 것은 매우 나쁜 형태입니다.