나는 Linux 서버에서 일부 작업을 자동화하기 위해 ExpectJ Java 라이브러리를 사용해 왔습니다. 그러나 이제는 각 실행마다 다른 텍스트 응답을 보내는 작업을 자동화해야 합니다. 출력은 다음과 같습니다.
Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012
********************************************************************************
********************************************************************************
[YOU HAVE NEW MAIL]
local-login [/home/user]%
그리고 내 코드에는 다음이 있습니다.
s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");
표시된 출력을 받았지만 마지막 답변을 어떻게 읽는지 모르기 때문에 다음 명령을 보낼 수 없었습니다. 정규식을 사용하려고 했지만 작동하지 않습니다.
답변1
앞의 배너 텍스트는 처리할 필요가 없습니다. 문자열/정규식 일치 또는 시간 초과와 같은 조건 중 하나가 충족될 때까지 기다립니다. 이전의 텍스트는 나중에 사용할 수 있도록 버퍼링되지만 일치 항목에는 포함되지 않습니다. 처리해야 할 것은 프롬프트 문자열을 찾는 것입니다: local-login [/home/user]%
. 그것이 어떤 모습일지 잘 알고 있다면(예를 들어, 항상 '[' 디렉토리 ']%'를 갖게 될 것입니다), 이에 대응하는 정규 표현식을 작성할 수 있습니다:
.*\[(/[^/]+)+\]%
출력에는 개행/캐리지 리턴이 없으므로 정규식에 개행/캐리지 리턴이 없는지 확인하십시오.
답변2
나는 당신이 정규식을 사용하여 일치시킬 수 없다고 생각합니다기대J.
것 같다String.indexOf
그들이 일치하는 것을 찾기 위해 의존하는 것처럼
if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)
pattern
예상되는 제공된 문자열은 어디에 있습니까?
따라서 대신 하위 문자열을 일치시켜서 더 잘 작동하는지 확인하세요.