В этом примере: 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, над которой в настоящее время работает Ожидаемый ожидаемый_экспектл?
Возможно, я не совсем понял концепции и инструменты для работы с потоками.
Я хочу видеть каждую строку потока независимо от того, совпадает она или нет даже если это только для целей отладки моего сценария.
Если вы посмотрите на официальная документация для 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];
Других решений пока нет …