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 流,之前使用 expect_popen() 打开。

cases

一个 Expect 案例数组。每个 Expect 案例都是一个索引数组,如以下表格所述

Expect 案例数组
索引键 值类型 描述 是否必填 默认值
0 string 模式,将与流输出进行匹配  
1 mixed 值,如果模式匹配,则该函数将返回此值  
2 integer 模式类型,以下之一:EXP_GLOBEXP_EXACTEXP_REGEXP EXP_GLOB

返回值

返回与匹配模式关联的值。

如果失败,此函数将返回:EXP_EOFEXP_TIMEOUTEXP_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("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(
"Error has occurred!");
}
}

fclose($stream);
?>

参见

  • expect_popen() - 通过 Bourne shell 执行命令,并打开到进程的 PTY 流

添加笔记

用户贡献笔记

此页面没有用户贡献的笔记。
To Top