Expect expect_expectl

(PECL expect >= 0.1.0)

expect_expectl — 프로세스의 출력이 패턴 중 하나와 일치하거나 지정된 기간이 경과하거나 EOF가 표시될 때까지 기다립니다.


설명

expect_expectl(resource $expect, array $cases, array &$match = ?): int

프로세스의 출력이 패턴 중 하나와 일치하거나 지정된 기간이 경과하거나 EOF가 표시될 때까지 기다립니다.

match가 제공되면 검색 결과로 채워집니다. 일치하는 문자열은 match[0]에서 찾을 수 있습니다. 원래 패턴의 일치 부분 문자열(괄호에 따름)은 match[1], match[2] 등에서 최대 match[9](libexpect의 제한)까지 찾을 수 있습니다.


매개변수

expect
이전에 expect_popen()으로 열린 예상 스트림입니다.
cases
예상 사례의 배열입니다. 각 예상 사례는 다음 표에 설명된 대로 인덱스 배열입니다.

Expect Case Array

Index Key Value Type 설명 Is Mandatory Default Value
0 string 스트림의 출력과 일치하는 패턴 yes  
1 mixed 패턴이 일치하는 경우 이 함수에서 반환되는 값 yes  
2 integer 패턴 유형, EXP_GLOB, EXP_EXACT 또는 EXP_REGEXP 중 하나 no EXP_GLOB

반환 값

일치하는 패턴과 관련된 값을 반환합니다.

실패 시 이 함수는 EXP_EOF, EXP_TIMEOUT 또는 EXP_FULLBUFFER를 반환합니다.


변경 로그

버전 설명
PECL expect 0.2.1 버전 0.2.1 이전에는 match 매개변수에서 일치 하위 문자열의 배열이 아니라 일치 문자열이 반환되었습니다.

Examples

예제 #1 expect_expectl() 예제

                  
<?php
// Copies file from remote host:
ini_set("expect.timeout", 30);

$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");

$cases = array(
    // array(pattern, value to return if pattern matched)
    array("password:", "asked for password"),
    array("yes/no)?",  "asked for yes/no")
);

while (true) {
    switch (expect_expectl($stream, $cases)) {
        case "asked for password":
            fwrite($stream, "my password\n");
            break;
        case "asked for yes/no":
            fwrite($stream, "yes\n");
            break;
        case EXP_TIMEOUT:
        case EXP_EOF:
            break 2; // break both the switch statement and the while loop
        default:
            die("Error has occurred!");
    }
}

fclose($stream);
?>
                  
                

기타

  • expect_popen() - Bourne 셸을 통해 명령을 실행하고 프로세스에 대한 PTY 스트림을 엽니다.