Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ejecución de comandos en Perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Oct 12, 2006 4:38 am
Dorian
Perlero Nuevo
Perlero Nuevo
Registrado: 12 Oct 2006
Mensajes: 1
Ejecución de comandos en Perl Responder citando

Hola.

Me gustaría ejecutar una serie de comandos durante el funcionamiento de mi programa en Perl. Usando el comando 'system' he obtenido buenos resultados. Por ejemplo:

Perl:
#!/bin/perl

system (ifconfig);



Ahora bien, si lo que yo quiero es ejecutar un comando que todavía no conozco no me funciona. Veamos otro sencillo ejemplo:

Perl:
#!/bin/perl

$comando = ifconfig;
system ($comando);
$argumento = Modo1
system (/home/user/seleccion $argumento)


Lo que no sé es como debo ejecutar comandos que tenga almacenados en variables ($string).
Además si quiero ejecutar un programa externo y le quiero pasar un argumento también contenido en una variable, no lo reconoce. Este es el caso de las dos últimas líneas cuando llamo al ejecutable 'seleccion' y quiero que reciba '$argumento'.

Gracias de antemano por su ayuda.

Un cordial saludo

PD. El sistema operativo es Debian
Mensaje Jue Oct 12, 2006 4:59 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Te faltan algunas comillas...
Perl:
#!/usr/bin/perl

$comando = "ifconfig";
system( $comando );               # Todo el comando está en una variable

$argumento = "-l";
system( "/bin/ls   $argumento" ); # Interpolación con las dobles comillas
system( '/bin/ls', $argumento  ); # Dos argumentos. El primero es literal

Digamos que lo que system necesita es una lista de argumentos, siendo el primero el ejecutable que quieres iniciar, y el resto, los argumentos que se le van a pasar.

Pero también se le puede pasar todo junto. Pero, ¡ojo!, el comportamiento de system es muy diferente en un caso que en otro. No dejes de leer el primer párrafo sobre system.
Mensaje Jue Oct 12, 2006 3:35 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Perl:

if ($> = 0 and $< = 0){
  system("ifconfig");
}
else {
  print "Solo root puede ejecutar ifconfig\n";
}

Rolling Eyes
Mensaje Jue Oct 12, 2006 6:07 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Creo que eso no es lo que preguntaba Dorian...
Mensaje Jue Oct 12, 2006 6:19 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

explorer escribió:
Creo que eso no es lo que preguntaba Dorian...

Sí y no, pues está lo que le respondiste (lo de system) y agregé lo de root, para no tener futuros problemas, supongo.
Aun así no hace mal poniendolo, depués no tendras que leer "si pero me de un error" y todo eso Wink
Aunque el código está mal, según veo ahora, la idea era:
Perl:
if($> eq 0 and $< eq 0){
  system("ifconfig");
}
else {
  print "Sólo root puede ejecutar ifconfig\n";
}
Mensaje Mie Oct 18, 2006 5:44 pm
jgvaldezt
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Oct 2006
Mensajes: 3
Responder citando

hola amigos, he instalado el ActivePerl sobre el IIS de Windows 2000 Server, para que este pueda ejecutar los archivos .CGI y .pl del Perl.
Bueno en la instalación, todo salió bien, incluso al ejecutar un pequeño código de Perl, también funciona, se puede visualizar en el iexplorer.

Estoy usando el DzSoft Perl Editor y funciona bien.
El problema que tengo es cuando utilizo la función system();.
En el editor corre perfecto, incluso en la línea de comando también funciona bien, pero cuando uso el Internet Explorer para ejecutar el codigo .pl, éste se queda bloqueado y sólo se visualiza la barra de estado, como si algo estuviera procesando y nada más.

El código es simple:

Perl:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

system("calc.exe");
print "<html><h1>Paso correctamente...</h1></html>\n";


¿Qué es lo que está pasando?

helpme
Mensaje Mie Oct 18, 2006 6:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

1. Bienvenido a los foros de Perl en Español.

2. Para iniciar una nueva pregunta, crea un nuevo hilo de discusión.

3. En el cgi estás ejecutando la calculadora. Es posible que el cgi no termine porque la calculadora nunca termina. ¿Aparece la calculadora en pantalla?

Prueba con esto:
Perl:
#!/usr/bin/perl

$|=1;
print "Content-type: text/html\n\n";

print "<html><body><h1>Arrancando calc.exe...</h1>\n";
system("calc.exe");
print "<h1>Fin de calc.exe.</h1></body></html>";
pero pasará lo mismo de antes... si calc.exe no termina, el cgi no seguirá...
Mensaje Jue Oct 19, 2006 8:50 am
jgvaldezt
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Oct 2006
Mensajes: 3
Problemas con la función system Responder citando

Te agradezco de antemano la ayuda.
Luego de revisar tu respuesta, vi al final algo que me dio una luz,
la última línea, en donde me decías que no terminaba la aplicación.

Claro que el código ejecutaba la calculadora, pero ese era sólo un ejemplo, en realidad la intención es ejecutar una aplicación de vfox que no visualiza ningún resultado (es un proceso), el problema era que al ser llamado desde el iexplorer el usuario que ejecutaba la aplicación era IUSR_localhost y este usuario, no tiene privilegios para la ejecución de aplicaciones; lo que hice es cambiar el usuario en la pestaña de seguridad del iis (sólo del directorio virtual), en acceso anónimo, y le puse el usuario administrador y eso fue la solución.

Ahora si funciona la ejecución desde la web, pero no se si esa solución es la correcta; de repente estoy dejando una puerta libre en mi servidor.

¿Qué opinas?
Mensaje Jue Oct 19, 2006 9:14 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Sí, es un peligro que el servidor web se ejecute como el usuario Administrador.

La solución hubiera sido dar permisos de acceso a los directorios, ficheros y programas que el servidor web iba a acceder, leer, escribir y/o ejecutar.

Yo no uso MicroSoft desde hace 6 años, pero por aquí habrá alguien que sepa qué hacer. (Lo dudo. El pobre Seth lleva esperando una respuesta desde hace un mes).
Mensaje Vie Oct 20, 2006 2:16 pm
romero
Perlero Nuevo
Perlero Nuevo
Registrado: 13 Oct 2006
Mensajes: 5
Argumentos de system Responder citando

Tengo problemas para usar el comando system.
tengo un CGI el cual es ejecutado por el ususario www-data, el problema es que siempre me cambia los argumentos.

@args=("cvs","-d:pserver:romero@lap.net:/cvsroot","checkout","modulo1");

system(@args);

Me di cuenta de que el comando que en realidad ejecuta perl es
cvs -d:pserver:www-data@romero checkout modulo1

Y obviamente obtengo un ' unknow host romero'

Como puedo hacer para que no me cambi los paramentros. He tratado con exec pero no me ha funcionado.
Y si uso strict marca @lap como si fuerama un array.

De antemano gracias.
Mensaje Sab Oct 21, 2006 2:05 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

pon un '\' delante de la '@' o pon todo el string entrecomillado simple (''), no doble ("").

Al ponerlo doble, Perl 've' una variable llamada @lap.
Mensaje Sab Oct 21, 2006 11:15 am
romero
Perlero Nuevo
Perlero Nuevo
Registrado: 13 Oct 2006
Mensajes: 5
Gracias Responder citando

Lo acabo de probar así y funcionó de maravilla.

Había estado buscando acerca de variables especiales y de ambiente para corregir esto y también de cómo usar [i]system[/i].
Pero nunca se me había ocurrido proteger la '@'.


Muchas gracias.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group