keyboard
para los objetos
IO::Pty::Script
que, cuando sea llamado desde un
manejador de guión permita la interacción con el usuario.
A partir de ese momento lo escrito por el usuario en el teclado
se redirigirá al comando bajo control de la seudoterminal.
Al pulsar una determinada secuencia de escape (pasada como
parámetro a keyboard
) se devuelve el control al guión.
Sigue un ejemplo de como puede ser usado el método
keyboard
:
lhp@nereida:~/Lperl/src/perl_networking/ch2/IO-Pty-Script/script$ cat -n ptyconnect2.pl 1 #!/usr/bin/perl -sw -I../lib 2 use strict; 3 use IO::Pty::Script qw(chat TIMEOUT DEFAULT_DEADLINE); 4 5 my %script; 6 our($c, $d, $p, $f); # Inicializadas via -s switch 7 8 $p = '' unless defined($p); 9 $d = DEFAULT_DEADLINE unless defined($d); 10 $f = '' unless defined($f); 11 die "Usage:$0 -c=command -p=key -d=deadline -f=script\n" 12 unless defined($c); .. ... 41 $script{'ssh europa'} = [ 42 $prompt => "$f\n", 43 $prompt => [\&titi, 1, 2, "tres"], 44 $prompt => sub { my $s = shift; $s->keyboard("\cD"); "ls\n" }, 45 $prompt => "echo 'Despues de la interaccion'\n", 46 $prompt => "exit\n" 47 ]; 48 .. ... 58 sub titi { 59 local $" = "\nsub titi:"; 60 print "<<sub titi: @_>>\n"; 61 "date\n"; 62 } 63 .. ... 70 71 chat(command => $c, deadline => $d, script => $script{$c}, 72 defaultaction => sub { print $_[0] } );Al ejecutar el anterior programa deberíamos tener una salida parecida a esta:
lhp@nereida:~/Lperl/src/perl_networking/ch2/IO-Pty-Script/script$ ptyconnect2.pl -c='ssh europa' -d=1 -f='uname -a' <<r = 'Linux europa.deioc.ull.es 2.4.20-ck2 #1 vie mar 28 17:32:02 WET 2003 i686 unknown Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. You have mail. Last login: Tue May 16 13:01:13 2006 from nereida.deioc.ull.es lhp@europa:~$ ' s = '' d = '0'>> <<sub titi: <<r = 'Linux europa.deioc.ull.es 2.4.20-ck2 #1 vie mar 28 17:32:02 WET 2003 i686 unknown lhp@europa:~$ ' s = '' d = '0'>> sub titi:1 sub titi:2 sub titi:tres>> echo "ESCRITO POR EL USUARIO" ESCRITO POR EL USUARIO lhp@europa:~$ lhp@europa:~$ <<r = '2003_2004 Lkimwitu alu Llatex2html article.pdf Lmoodle bin Lperl bspgrid.pdf mail bspphyton.pdf ml2sparser.ps ............ .... # Salida omitida lhp@europa:~$ ' ^D # Secuencia de escape pulsada s = '' d = '0'>> <<r = 'Despues de la interaccion lhp@europa:~$ ' s = '' d = '0'>> lhp@nereida:~/Lperl/src/perl_networking/ch2/IO-Pty-Script/script$El método
keyboard
recibe como argumentos, además
de la referencia al objeto la secuencia de escape
que termina la interacción con el teclado
y el valor a retornar por el manejador:
lhp@nereida:~/Lperl/src/perl_networking/ch2/IO-Pty-Script/lib/IO/Pty$ sed -ne '/sub keyboard/,228p' Script.pm | cat -n 1 sub keyboard { 2 my $self = shift; 3 my $escape = shift; 4 my $return_value = shift; 5 .. ... 39 }
Casiano Rodríguez León