• Publicidad

Retornar un 'yes' a un prompt de otro programa

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Retornar un 'yes' a un prompt de otro programa

Notapor ivoxtz » 2012-06-16 21:20 @930

Hola a todos,

Soy nuevo en Perl y he estado tratando de entender cómo pasar una respuesta a un comando de un programa externo.

El comando lo ejecuto de la siguiente manera:

my $nhloaddb = `nhLoadDb -p C:\respaldoDb`;

El problema es que dicho comando me responde con una pregunta, a la cual debo escribir manualmente 'Yes' para confirmar el comando.

Necesito que ese 'Yes' sea escrito automáticamente con el código en Perl. Leí algo sobre CPAN, pero no sé si esto me sirva. Lo ideal sería poder comprenderlo con algún ejemplo.

Quien pueda ayudarme o aclarar mi duda le doy las gracias.

Saludos,

Iván.
ivoxtz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-06-16 20:51 @910

Publicidad

Re: Retornar un 'yes' a un prompt de otro programa

Notapor explorer » 2012-06-17 07:01 @334

Bienvenido a los foros de Perl en Español, ivoxtz.

¿Tienes que escribir 'yes' o te vale con pulsar la tecla 'Enter', del teclado?

¿Necesitas capturar la salida del comando? En el código estás usando las comillas invertidas para ejecutar el comando, capturar su salida y dejarlo en la variable $nhloaddb.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Retornar un 'yes' a un prompt de otro programa

Notapor ivoxtz » 2012-06-17 10:35 @482

Hola explorer,

Muchas gracias por tu respuesta.

Efectivamente, necesito poner un 'yes' y dar un 'enter' de manera automática. Esto es lo que no estoy pudiendo hacer.

Por otro lado, la salida del comando la estoy almacenando correctamente en una variable, pues luego necesitaré parsear y crear un archivo log. Esto en particular lo sé hacer.

Quedo atento a tu respuesta.

Muchas gracias.
ivoxtz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-06-16 20:51 @910

Re: Retornar un 'yes' a un prompt de otro programa

Notapor explorer » 2012-06-17 15:11 @674

Pues una lástima que no te valga con un solo 'Enter', porque entonces podrías haber utilizado el método hammer() del módulo Sysadm::Install.

Una solución inmediata sería abrir el comando con una tubería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(my TUBERIA, '| nhLoadDb -p C:/respaldoDb > salida.txt');
  2. print TUBERIA "yes\n";
  3. close TUBERIA;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Más información en tu propio ordenador en perldoc perlipc, y en la Web, y en perlfaq8.

Seguramente no sea tan sencillo, porque el programa no estará leyendo desde la entrada estándar como si fuera un archivo, sino de forma interactiva.

En esos casos, lo mejor es usar un módulo como Expect o Expect::Simple.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Retornar un 'yes' a un prompt de otro programa

Notapor ivoxtz » 2012-06-17 16:56 @747

Hola, explorer,

Tanto como el método hammer() como abrir el comando con una tubería no los conocía. Voy a leer todo al respecto y lo probaré.

Por otro lado, te cuento que pude solucionar mi problema de otro modo. El programa 'nhLoadDb' es un 'bash' en Solaris y modifiqué dentro de su código para que no me retorne la pregunta y siga de largo.

¡Muchas gracias por tu ayuda!

Saludos,

Iván.
ivoxtz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-06-16 20:51 @910


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 28 invitados