Я довольно новичок в Perl и искал в интернете документацию о том, что я пытаюсь сделать.Мне не повезло.
У меня есть программа, которая выводит информацию на стандартный вывод с подсказками.Мне нужно сделать Perl-скрипт для передачи этой информации в файл.
Я думал, что смогу использовать Expect, но, похоже, проблема с каналом после первого запроса.
Вотчасть моего кода:
# Run program and compare the output to the BASE file
$cmd = "./program arg1 arg2 arg3 arg4 > $outfile";
my $exp = new Expect;
$exp->spawn($cmd);
BAIL_OUT("couldn't create expect object") if (! defined $exp);
$exp->expect(2);
$exp->send("\n");
Для этого случая есть только одна подсказка для пользователя, чтобы нажать «ввод».Эта программа небольшая и очень быстрая - для получения первого приглашения достаточно 2 секунд.
Выходной файл содержит только первую половину информации.
Есть ли у кого-нибудь предложения покак я могу получить вторую половину?
ОБНОВЛЕНИЕ: я проверил, что это работает с Expect, используя простой скрипт:
spawn ./program arg1 arg2 arg3 arg4
expect "<Return>"
send "\r"
interact
Где "" - этоподробное выражение, которое может найти скрипт Perl.
Примечание: я пытался написать свой скрипт Perl, ожидая "" ... это не имеет значения.
т.е.
$exp->expect(2, '-re', "<Return>")
Есть мысли?
ОБНОВЛЕНИЕ2:
Хаза!Я нашел решение своей проблемы ... совершенно случайно.
Итак, в каком-то тестовом коде я допустил опечатку ...
$exp->expect(2);
$exp->send("\r");
$exp->expect(2);
Обратите внимание на ожидаемый трейлинг(2) ... я случайно оставил это, и это сработало!
Итак, я пытаюсь понять, что происходит.Unix ожидать, похоже, не работает таким образом!Похоже, что Expect, реализованный в Perl, "ожидает" что-нибудь ... не только приглашения?
Итак, я ожидал еще 2 секунды, чтобы собрать стандартный вывод, и я могу получить все.могу предложить более подробную информацию о том, что здесь происходит, я бы хотел понять, что происходит.