(PECL expect >= 0.1.0)
expect_expectl β ΠΠΆΠΈΠ΄Π°Π΅Ρ, ΠΏΠΎΠΊΠ° Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΡΠΎΠΊΠ° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ Π²Π΅ΡΠ½ΡΡΡΡ EOF
ΠΠΆΠΈΠ΄Π°Π΅Ρ, ΠΏΠΎΠΊΠ° Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΡΠΎΠΊΠ° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ Π²Π΅ΡΠ½ΡΡΡΡ EOF.
ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ match, ΡΠΎ ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ
ΠΏΠΎΠΈΡΠΊΠ°.
Π‘ΠΎΠ²ΠΏΠ°Π²ΡΠ°Ρ ΡΡΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π° Π² match[0].
Π‘ΠΎΠ²ΠΏΠ°Π²ΡΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΊΠΎΠ±ΠΎΠΊ) Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅ Π±ΡΠ΄ΡΡ
ΡΠΎΡ
ΡΠ°Π½Π΅Π½Ρ Π² match[1], match[2], Π²ΠΏΠ»ΠΎΡΡ
Π΄ΠΎ match[9] (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ libexpect).
expectcasesΠΠ°ΡΡΠΈΠ² ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅:
| ΠΠ½Π΄Π΅ΠΊΡ | Π’ΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
|---|---|---|---|---|
| 0 | string | ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π° | Π΄Π° | Β |
| 1 | mixed | Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ | Π΄Π° | Β |
| 2 | integer |
ΡΠΈΠΏ ΡΠ°Π±Π»ΠΎΠ½Π°:
EXP_GLOB,
EXP_EXACT
ΠΈΠ»ΠΈ
EXP_REGEXP
|
Π½Π΅Ρ | EXP_GLOB |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π»ΠΎ.
Π ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½ΡΡ:
EXP_EOF,
EXP_TIMEOUT
ΠΈΠ»ΠΈ
EXP_FULLBUFFER
| ΠΠ΅ΡΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| PECL expect 0.2.1 |
ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 0.2.1, Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ match Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π°ΡΡ ΡΡΡΠΎΠΊΠ°,
Π° Π½Π΅ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ²ΠΏΠ°Π²ΡΠΈΡ
ΡΡΡΠΎΠΊ.
|
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ expect_expectl()
<?php
// ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°:
ini_set("expect.timeout", 30);
$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array(
// array(ΡΠ°Π±Π»ΠΎΠ½, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ² Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅)
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; // ΠΡΠ΅ΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ switch ΡΠ°ΠΊ ΠΈ ΡΠΈΠΊΠ» while
default:
die("ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°!");
}
}
fclose($stream);
?>