• Publicidad

Ejecución de comandos en Perl

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ejecución de comandos en Perl

Notapor Dorian » 2006-10-12 05:38 @276

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl

system (ifconfig);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4



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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl

$comando = ifconfig;
system ($comando);
$argumento = Modo1
system (/home/user/seleccion $argumento)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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
Dorian
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2006-10-12 05:02 @251

Publicidad

Notapor explorer » 2006-10-12 05:59 @291

Te faltan algunas comillas...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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.
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

Notapor creating021 » 2006-10-12 16:35 @732

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($> = 0 and $< = 0){
  system("ifconfig");
}
else {
  print "Solo root puede ejecutar ifconfig\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

:roll:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2006-10-12 19:07 @838

Creo que eso no es lo que preguntaba Dorian...
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

Notapor creating021 » 2006-10-12 19:19 @847

explorer escribiste: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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if($> eq 0 and $< eq 0){
  system("ifconfig");
}
else {
  print "Sólo root puede ejecutar ifconfig\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor jgvaldezt » 2006-10-18 18:44 @822

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

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

system("calc.exe");
print "<html><h1>Paso correctamente...</h1></html>\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Qué es lo que está pasando?

helpme
jgvaldezt
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-10-18 18:24 @808

Notapor explorer » 2006-10-18 19:20 @847

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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>";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero pasará lo mismo de antes... si calc.exe no termina, el cgi no seguirá...
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

Problemas con la función system

Notapor jgvaldezt » 2006-10-19 09:50 @451

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?
jgvaldezt
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-10-18 18:24 @808

Notapor explorer » 2006-10-19 10:14 @468

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).
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

Argumentos de system

Notapor romero » 2006-10-20 15:16 @678

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:[email protected]:/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.
Avatar de Usuario
romero
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-10-13 17:59 @791

Siguiente

Volver a Intermedio

¿Quién está conectado?

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

cron