PHP ожидают: как скопировать содержимое потока

В этом примере: http://php.net/manual/en/expect.examples-usage.php, то есть

<?php
ini_set("expect.timeout", -1);
ini_set("expect.loguser", "Off");

$stream = expect_popen("ssh root@remotehost");

while (true) {
switch (expect_expectl ($stream, array (
array ("password:", PASSWORD), // SSH is asking for password
array ("yes/no)?", YESNO), // SSH is asking whether to store the host entry
array ("~$ ", SHELL, EXP_EXACT), // We've got the shell!
))) {
case PASSWORD:
fwrite ($stream, "secret\n");
break;
....

Как бы я вывел часть $ stream, над которой в настоящее время работает Ожидаемый ожидаемый_экспектл?

Возможно, я не совсем понял концепции и инструменты для работы с потоками.

Я хочу видеть каждую строку потока независимо от того, совпадает она или нет даже если это только для целей отладки моего сценария.

0

Решение

Если вы посмотрите на официальная документация для expect_expectl(), вы увидите, что он принимает третий аргумент, который заполняется текущим соответствием. Вся строка будет в $match[0] и соответствующие сегменты в следующих элементах (так же, как preg_match()).

while (true) {
switch (expect_expectl ($stream, array (
array ("password:", PASSWORD), // SSH is asking for password
array ("yes/no)?", YESNO), // SSH is asking whether to store the host entry
array ("~$ ", SHELL, EXP_EXACT), // We've got the shell!
array (".*", 'ALL', EXP_REGEXP), // Unmatched lines
), $match)) {
case PASSWORD:
echo $match[0];
fwrite ($stream, "secret\n");
break;
/* other cases */
case 'ALL':
echo $match[0];
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]