2016-08-26 4 views
0

pexpect.send (cmd)의 출력을 읽으려고하는데 여기에 내가 직면 한 문제가 있습니다.Pexpect : 마지막으로 보낸 메시지 읽기

시퀀스에서 많은 명령을 보내고 있으며 특정 명령 집합을 읽거나 기대하고 싶습니다. 조건은 마지막 명령의 출력 만 고려해야한다는 것입니다. 그러나 expect은 마지막으로 읽은 시점부터 일치합니다. 나는 출력이 필요한 명령을 보내기 전에 EOF와 일치하는 것과 같은 다른 방법을 시도했지만 EOF는 자식이 종료되었음을 의미합니다. 타임 아웃까지 읽은 다음 명령을 보내려고했지만 타임 아웃 그 자체로 자식이 종료됩니다.

출력의 마지막 또는 마지막 줄에서 읽을 수있는 방법을 찾았습니다. 고정 바이트를 파일이나 문자열로 읽은 다음 출력을 조작하여 원하는 정보를 얻으 려합니다. 여기에도 고정 된 바이트 수는 고정되어 있지 않습니다. 이 작업을 수행하는 데 신뢰할만한 방법이없는 것 같습니다.

아무도 나를 정리할 수 있습니까?

답변

0

이 문제를 처리 할 수 ​​있지만 아무도 버퍼마다 send 호출이 expect에 대한 모든 호출과 일치해야합니다 Pexpect에서

  1. 를 세척하지있는 세 가지 방법이 있습니다. 이렇게하면 파일 포인터가 이전에 보낸 보다 먼저 이동합니다.
  2. 앞에 하나의 send이있는 경우 파일 포인터를 마지막으로 보낸 위치로 이동하는 방법을 제공하려면 이 필요합니다. 여분의 send을 입력하면 expect 출력이 고유합니다. 일련 번호 의 send 중 어느 것도 send 중 어느 것도 해당 출력을 제공하지 않는 고유성이 있어야합니다.
  3. 세 번째 방법은 파일에 logfile_read 집합을 사용하는 것입니다. 모든 출력 이이 파일에 기록됩니다. expect이 사용 된 send 전에 파일 포인터의 위치를 ​​가져옵니다. 이제 전송 후 파일 포인터의 위치도 이됩니다. 첫 번째와 두 번째 포인터 사이의 파일에서 예상 된 패턴을 검색하십시오.

첫 번째 방법은 수행해야하는 이상적인 방법입니다.