pexpect는 65자를 초과하면 명령과 일치하지 않습니다.

pexpect는 65자를 초과하면 명령과 일치하지 않습니다.

문제예상하다, 파이썬 모듈.

명령 길이가 65보다 크면 Pexpect는 예상된 동작을 수행하지 않습니다.

#!/usr/bin/python
import pexpect

sshCmd='ssh [email protected]'
prompt='[root@user ~]#'
ConnectToClient=pexpect.spawn(sshCmd)
ConnectToClient.expect('password')
ConnectToClient.send('abcd')
ConnectToClient.expect(prompt)
ConnectToClient.send('echo abcdefghijklmnopqrst111111111111111111111111111111111111111111111111111111111 ')
ConnectToClient.expect(prompt) ---> PASS
command = 'echo abcdefghijklmnopqrst111111111111111111111111111111111111111111111111111111111'
ConnectToClient.expect(command, prompt) 

":"이 예상되는 경우, command (.*) prompt --->실패하다명령 길이가 65자보다 큰 경우.

expect_str = "%s(.*)%s" % (command, self._default_prompt)    

답변1

프로그램에 두 가지 오류가 있습니다. 마지막 줄은 불법입니다.

ConnectToClient.expect(command, prompt) 

Expect는 문자열 대신 시간 초과 숫자를 두 번째 매개 변수로 사용하므로 효과가 없습니다.

통화 중 또 다른 질문은 다음과 같습니다.

ConnectToClient.expect(prompt)

prompt정규식(정규식)이어야 합니다. 문자열을 제공하면 정규식으로 컴파일됩니다. 하지만 정규 표현식에서는 이 문자가 [특별하므로 이스케이프 처리해야 합니다. 모든 설정

prompt = r'\[root@user ~\]#'

또는 regex 대신 문자열이 필요한 use를 사용하지 마십시오 .expect()..expect_exact()

답변2

기본적으로 프롬프트와 명령이 80보다 긴 경우 pexpect windowsize는 (24행과 80열)로 설정됩니다. 나는이 문제에 직면 해 있습니다. setwinsize(24,80)를 setwinsize(24,150)로 변경하면 정상적으로 작동합니다.

관련 정보