Утилита empty (http://empty.sourceforge.net) предназначена для замены TCL/Expect, т.е. позволяет запускать и управлять интерактивными программами из sh-скриптов.
Пример кода на empty
:#!/bin/sh
empty -f -i in -o out telnet foo.bar.com
empty -w -i out -o in "ogin:" "luser"
empty -w -i out -o in "assword:" "TopSecret"
empty -s -o in "who am i"
empty -s -o in "exit"
Тоже самое на expect
:#!/usr/bin/expect
spawn telnet foo.bar.com
expect ogin {send luser\r}
expect assword {send TopSecret\r}
send "who am i\r"
send "exit\r"
expect eofНа perl:
#!/usr/bin/perl
use Expect;
my $exp = Expect->spawn("telnet foo.bar.com");
$exp->expect($timeout,
[ 'ogin: $' => sub {
$exp->send("luser\n");
exp_continue; }
],
[ 'assword:$' => sub {
$exp->send("TopSecret\n");
exp_continue; }
],
'-re', qr'[#>:] $'
);
$exp->send("who am i\n");
$exp->send("exit\n");
$exp->soft_close();
На Python:#!/usr/local/bin/python
import pexpect
child = pexpect.spawn('telnet foo.bar.com');
child.expect('ogin: ');
child.sendline('luser');child.expect('assword:');
child.sendline('TopSecret');child.sendline('who am i');
child.sendline('exit');child.expect(pexpect.EOF);
print child.before;
URL: http://empty.sourceforge.net
Новость: http://www.opennet.me/opennews/art.shtml?num=6108
http://www.opennet.me/base/dev/interactive_tools.txt.html не оно?
Вопрос, а будет ли нормально дожидаться конца вывода? Можно ли будет куданить вывод заворачивать, чтобы видеть что она там наделала? Потому как Expect насчет этого полное г.
Создается два пайпа: один для ввода другой для вывода. Впринципе, никто не мешает писать в первый (например припомощи echo) и читать из второго (при помощи cat, например)
Если вы вдруг начали использовать empty, очень прошу сообщить мне на email zmey20000@yahoo.com или, зная ленность людей, сюда в форум (надеюсь, Maxim Chirkov поймет и не будет сильно против) следующую информацию:
а. свой uname -a
б. если не слишком сложно, что вам понравилось в empty, а что нет.Хочется знать, на что ориентироваться в следующих версиях.
Было бы прикольно, если бы работа с PTY была вынесена в отдельную библиотеку libempty - я бы заюзал с удовольствием. А то libexpect тяжеленный, да и TCL просит, кажись...
задумаюсь, но в планы не входило.
PTY позволит работать с ssh с паролями, года два назад делал расширение для php, почти аналогично приведенному для Python
2 Storm
если сохранилось решение для php - поделитесь?