• Publicidad

Cómo enviar instrucciones a un programa desde Perl

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

Cómo enviar instrucciones a un programa desde Perl

Notapor Alfumao » 2011-08-17 10:41 @487

Hola a todos,

Necesito usar Perl o CGI para enviarle instrucciones a un programa externo que se ejecuta desde la línea de comandos. No tengo ni idea de cómo enfocar el tema, por eso no puedo poner ningún script de ejemplo. La idea es recoger de una página web varios parámetros (bien desde formularios, bien desde una línea de input de texto) y con esto componer la instrucción para enviar al otro programa y que éste la ejecute.

¿Me podríais dar ideas para ir enfocando el asunto?

¿Cómo se mandarían, desde Perl, los parámetros que generan una instrucción a la que dicho programa pueda responder?


Un saludo y perdonad la ambigüedad.
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Publicidad

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor explorer » 2011-08-17 11:22 @515

Pero, ¿cómo son los argumentos que quieres enviar?

Si son solo cadenas de caracteres, las puedes enviar en la misma línea de comando que ejecuta el programa...

> Necesito usar Perl o CGI

Aclaración. Perl es un lenguaje de programación. CGI es un protocolo de comunicación y ejecución de procesos. Los CGI se pueden escribir en cualquier lenguaje, solo que en este foro nos gusta hacerlo en Perl :)

Yo, supongo, que lo que has querido decir es que no sabes si crear un programa que se ejecute desde el sistema o un programa cgi que se ejecute desde el servidor web.

Para ejecutar un programa externo, mírate estos hilos:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor Alfumao » 2011-08-17 12:40 @569

Hola explorer,

Concreto más: sí, quiero mandar esta instrucción a un programa llamado Blast.exe. ¿Cómo lo hago?
Según lo expuesto en los posts que me comentaste (uno lo inicié yo mismo por otro tema y ni me acordaba...) debería escoger la opción qx() porque espero una resultado de vuelta. Una vez elegida opción, ¿cuál es la sintaxis correcta para esta instrucción?

¿Sería así?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. qx(Blast.exe);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y para incluir la orden, ¿así?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. qx(tblastn -query RR.fasta -db Sp23G -out RR.out);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Siento ser tan torpe con estos temas.

Un saludo
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor explorer » 2011-08-17 13:17 @595

De esa manera estás ejecutando los programas, pero no estás recogiendo los resultados.

Debería ser así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $resultado = qx(tblastn -query RR.fasta -db Sp23G -out RR.out);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora bien... esto solo funcionará si tblastn es un comando reconocido por el sistema. Si el sistema donde estás no sabe dónde está el comando tblastn, debes indicar la ruta completa. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $resultado = qx(C:/Blast/tools/tblastn -query RR.fasta -db Sp23G -out RR.out);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y pasa lo mismo con los argumentos RR.fasta y RR.out. tblastn debe saber dónde están esos ficheros. Por defecto, deberían estar en el mismo directorio en donde estás ejecutando el programa. Pero si no es así, deberás colocar la ruta completa a esos archivos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $resultado = qx(tblastn -query C:/Practica/pruebas/RR.fasta -db Sp23G -out C:/Practica/pruebas/RR.out);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El directorio de trabajo lo puedes cambiar desde dentro de Perl, con el comando chdir(), si necesitas moverte por el árbol de directorios.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor Alfumao » 2011-08-17 14:12 @633

¡¡¡Muchísimas gracias, explorer!!!

Lo probaré en cuanto pueda y comentaré cómo me ha ido.

:D
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor pvaldes » 2011-08-17 18:50 @826

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $argumento_pasado_como_variable = "-f";
  2.  
  3. my $fo = system("programa $argumento_pasado_como_variable");
  4.  
  5. my $fo = `programa $argumento_pasado_como_variable`;
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


depende mucho de cómo funcione el ejecutable y qué argumentos se puedan pasar, algunos fallan, hay cosas que no pueden hacerse tan fácilmente con system().
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor explorer » 2011-08-17 19:17 @845

Pero, pvaldes... no nos dejes así...

¿Qué cosas no se pueden hacer con system()?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor Alfumao » 2011-08-20 05:21 @264

Tengo un problema a la hora de utilizar las soluciones que me disteis.

Estoy intentando cargar los archivos para utilizar el programa (he empezado con HMMer que es más sencillo de usar que BLAST) desde una página HTML, a través de un formulario de subida de archivos (el que muestra el botón "Examinar"). El resultado se consigue sin problemas cuando el archivo está en la misma carpeta que el CGI desde el que llamo a la ejecución del HMMer, pero si está en cualquier otra ubicación, el procedimiento no funciona...

Os paso el script del CGI para que lo veáis:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/perl/bin/perl.exe
  2. use warnings;
  3. use strict;
  4. use CGI ':standard';
  5.  
  6. # HTTP HEADER
  7. print "content-type: text/html\n\n";
  8.  
  9. my $file= param('file');
  10. my $profile= param('profile');
  11.  
  12. my $resultado = `hmmsearch "$profile" "$file" > C:/xampp/htdocs/WEB/$file.out`;
  13. #funciona tambien usando "qx();"
  14.  
  15. my $report= "$file.out";
  16.  
  17. print qq(<A HREF='$report' TARGET='_blank'>-Open in browser or Right click to download file-</A><br><br><br><br><br>\n);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A ver si no he metido la pata en algo muy tonto...
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor explorer » 2011-08-20 13:29 @604

Prueba a poner la ruta completa, al ejecutable.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo enviar instrucciones a un programa desde Perl

Notapor Alfumao » 2011-08-20 14:05 @628

Hola, explorer,

El problema no es el ejecutable (que estará residente en la carpeta del mismo cgi), el problema me lo dan los archivos que deben ser recibidos del HTML mediante:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $file= param('file');
  2. my $profile= param('profile');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


No entiendo por qué, pero si los archivos no están en la carpeta del cgi, es como si no los recibiera, y esa ruta de enlace ha de venir dada por el ordenador del usuario, yo no la puedo poner...
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Siguiente

Volver a Básico

¿Quién está conectado?

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