2015-02-04 3 views
0

테스트 장치에 텔넷으로 연결하고 로그인 한 후 10 줄의 응답을 제공하는 명령을 실행하십시오. 이 10 줄을 배열이나 데이터 구조에 할당하여 응답을 확인하려고합니다. 예 : 내 대답은 다음과 같습니다. 줄의 목록에서 비트와 조각을 확인하고 싶습니다. 192, brown0903을 확인하고 싶을 수 있습니다. telnet 명령의 응답 처리

나는
녹색, 갈색
노란색 0903

내 샘플 코드에 따라 11 0909 곡물
의 색상 입니다있는 모래의 192 개 블록을 가지고있다. 결과를 배열로 지정하면 모든 데이터가 첫 번째 요소로 지정됩니다.

require 'net/telnet' 

i = Net::Telnet::new("Host" => '192.111.214.16', 
    "Port" => 23, 
    "Output_log" => "output.log", # default: nil (no output) 
    "Dump_log" => "dump.log", # default: nil (no output) 
    "Prompt"  => /[#>]/ , # default: /[$%#>] \z/n 
    "Telnetmode" => true,   # default: true 
    "Timeout" => 100,   # default: 10 
) 

i.login("admin", "pass") { |c| print c } 
result = i.cmd("String" => "status", "Match" => /a#/) 
print result 
+0

는 응답이 항상 동일한 구조로 돌아 오지 않거나 데이터 이동을 할 수 있습니다

그래서 당신은 한 줄에 하나의 문자열을 포함하는 배열로 얻을 수 split을 사용할 수 있어야합니다? – James

+0

동일한 구조가 의도됩니다. 동일한 구조로 수신되며 미리 설정된 값을 비교하기 쉽습니다. – aksarc

답변

0

documentation에 따르면, cmd 전체 출력을 포함하는 문자열을 반환합니다.

result = i.cmd("String" => "status", "Match" => /a#/).split("\n") 
+0

감사합니다. 그것은 완벽하게 작동했습니다. 스플릿 ("\ n") 내게 필요한 응답을 준 – aksarc

+0

당신은 오신 것을 환영합니다. 응답에 공백이 있으면 필요하기 때문에 인수 값 "\ n"을 내 대답에 추가했습니다. 언급 해 주셔서 감사합니다. –

+0

다른 질문이 있습니다. 배열 요소는 어떤 데이터 유형입니까? 일치하는 문자열로 각 요소를 비교하려고 시도했지만 항상 실패합니다. – aksarc