2012-05-18 4 views
1

나는 시스코 장비에 telnet 연결하고 'show int status err'명령을 실행하여 다음과 같은 루비 스크립트를 작성했습니다.텔넷 스위치에 대한 Ruby 스크립트

require 'net/telnet' 

C3550_20_PterraEst = "192.168.244.20" #Enter the IP address here 

USER = "user" #Enter username here 

PASS = "password" #Enter password here 

ENABLE = "password" #Enter enable password here 

print "Selezionare il piano [0-1-2-All]: "; 

# get the input from the console, 
val1 = gets; 
tn = Net::Telnet::new("Host" => C3550_20_PterraEst, 
"Timeout" => 5, 
"Prompt" => /Username/) 
tn.cmd("\n#{USER}") 
tn.cmd(PASS) 
tn.cmd("sh int status err\n") { |c| print c } 
exit 

가 지금은 그 시스코 장치의 출력이 (내가 보낼 때 '내부 상태 ERR을 보여') 내 스크립트 내부 변수에 할당해야한다는 싶어 ... 내가 더 잘 설명 :

명령 있다고 가정 ' 쇼 INT 상태 ERR '는이 값을 반환

지능에 의해 Fa0/20 지능에 의해 Fa0/25

내가 ... 변수 1 = 같은 무언가를 원하는'Int 수에 의해 Fa0/20, Int 수에 의해 Fa0/25 ' 및 나중에 내 스크립트에서 variable1을 사용하십시오.

마녀 방법으로 할 수 있습니까?

답변

0

이 줄의 tn.cmd("sh int status err\n") { |c| print c } c는 명령에서 반환 된 값이지만 로컬 변수이므로 해당 블록에 대해 존재합니다. instance variable을 사용하여 포함 시키면 블록 외부에서 사용할 수 있습니다.

+0

다음과 같이하면됩니다. tn.cmd ("sh int status err \ n") {| @c | print @c} 오류가 발생합니다; – Marco

1

나는 싶은 것은 아니라고 생각 :

tn.cmd("sh int status err\n") { |c| print c } 

아니라 :

response = tn.cmd("sh int status err\n") 

을 NET : 텔넷, 텔넷 # cmd를 응답을 반환에 문서에 따르면. 블록을 전달하면 블록에 대한 응답도 산출되지만 응답을 변수에 저장하려면 내 예제가이를 수행하는 가장 좋은 방법입니다. 당신은 또한이 같은 두 가지를 모두 수행 할 수 있어야한다 밖으로 표준에 대한 응답을 인쇄하고 싶었다면

: tn.cmd 경우

response = tn.cmd("sh int status err\n") { |c| print c } 

그러나, ("쉬 INT 상태 ERR \ 없음") { | c | print c}에서 오류가 발생하면 오류가 발생하는 이유를 알아낼 때까지 내 솔루션이 작동하지 않을 수 있습니다. 문제를 해결하는 데 도움이 필요하면 댓글에 추가해야합니다.

이 모든 것으로 텔넷 응답에 대한 응답으로 추가 명령을 내릴 스크립트를 원할 경우 [expect][1]을 사용하는 것이 좋습니다.

관련 문제