예상 스크립트 - 파일에서 읽고 사용자 입력을 받아들입니다.

예상 스크립트 - 파일에서 읽고 사용자 입력을 받아들입니다.

"예상" 스크립트를 작성하는 방법:

  1. IP 주소 목록을 반복하고 각 주소를 기록하여 명령을 실행합니다(BASH for 루프에서와 마찬가지로). 지금은 Expect 스크립트의 몇 줄을 복사/붙여넣고 각 장치의 고유 IP를 수동으로 입력했습니다. 그리 효율적이지는 않습니다.

  2. Expect는 사용자 입력을 받아 변수에 기록합니까(예: BASH의 "읽기")? 다음 작업을 수행하는 스크립트를 작성하고 싶습니다. "라우터의 IP 주소를 입력하세요." "확인하려는 라우터의 포트를 입력하세요." 그런 다음 Expect를 시작하고 해당 IP 주소에 SSH를 적용한 다음 해당 라우터를 사용하여 몇 가지 명령을 실행하세요. 포트.

답변1

"Exploring Expect"로 돌아가서 일부 expect명령문이 실패 하면 expect이를 파일 끝(eof)으로 처리하고 종료하며 스크립트도 종료한다는 사실을 발견했습니다. 그래서 나는 간단히 다음과 같이 덧붙였습니다.

expect {
{eof} {action_here}
}

효과가있다.

답변2

이 질문은 언급된 기술에 특정하기보다는 목표 지향적이므로 내 정신을 바탕으로 해결하려고 합니다. 저는 파이썬을 사용하겠습니다.

답변: 질문 1:

기본적으로 파일에서 IP/주소를 구문 분석하고 각 IP 주소에 대해 원하는(유사한) 앞뒤 시퀀스를 실행하려는 것처럼 들립니다.

제외 스크립트에서 IP 주소를 구문 분석하는 대신 Python을 사용하여 파일에서 IP 주소를 구문 분석하고 각 IP 주소에 대해 동일한 Expect 명령을 실행하려고 합니다.

따라서 루프의 각 ipaddress에 대해 변수에 다른 ipaddress를 할당하고 Expect 명령을 실행할 수 있도록 ipaddress를 변수로 사용하여 Expect 명령을 작성해야 합니다.

"expect" 유사 함수에 대해서는 "pexpect" 라이브러리를 살펴보세요. 이는 Python 스크립트에 기대 유사 함수를 노출하는 Python 모듈입니다. (예제와 다른 문서/예제에 대한 링크가 포함된 이 답변을 참조하세요.https://stackoverflow.com/a/11160553/1248361). 구체화해보자:

위 링크의 예를 보면 예상되는 시퀀스가 ​​"""로 시작된다는 점에 유의하세요.

child = pexpect.spawn('비밀번호가 필요한 명령') child.expect('비밀번호를 입력하세요') child.sendline('password')

""" pexpect.spawn 메소드의 문자열 매개변수를 pexpect.spawn('ipaddress를 옵션으로 사용하는 비밀번호가 필요한 일부 명령' + ipaddress_variable)으로 쉽게 대체할 수 있습니다.

그래서 파이썬에서는 가변 매개변수를 사용하여 for 루프가 반복될 때마다 변경되는 매개변수로 시퀀스의 일부를 예상하는 함수를 정의합니다.

다음과 같습니다(의사코드입니다).

def Expect_function(ipaddress_variable): pexpect.spawn('비밀번호가 필요한 일부 명령' +ipaddress_variable) child.expect('비밀번호 입력') child.sendline('password') child.expect..... (이것은 어디에 있습니까? 원격 시스템에서 수행해야 할 작업을 인계받아 수행)

(죄송합니다. 형식, 사전 설정 및 코드가 내 기대에 미치지 못했습니다.)

함수가 정의되면 나머지는 간단합니다.

IP 주소를 반복하고 다음 의사 코드와 같이 함수를 호출하면 됩니다.

ipfile의 ipaddress의 경우: Expect_function(ipaddress)

두 번째 문제도 Python을 통해 처리하겠습니다.

관련 정보