Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Función exec() y system() en Windows  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota Jue Jul 29, 2010 12:11 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 11:41 am
Mensajes: 4
Función exec() y system() en Windows  RESUELTO
Hola que tal, tengo una duda con las funciones exec() y system().

Resulta que yo quiero llamar a una aplicación desde Perl con el system(), y cuando lo hago me abre la aplicación pero me deja una ventana del cmd abierta, que no se cierra hasta que no salgo del programa (en este caso el Notepad++).

El código es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Usando Coloreado de perl
system('C:\Program Files\Notepad++\Notepad++.exe');


Probé con el exec() y es peor porque directamente no abre la aplicación.

Quisiera saber si existe algún parámetro para el system() o de que forma puedo hacer para que al ejecutar un perl no me quede esa ventana en espera.

Muchas Gracias.


Nota Jue Jul 29, 2010 1:09 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 6886
Re: Función exec() y system() en Windows
Bienvenido a los foros de Perl en Español, Harvest.

Si estás usando la distribución ActivePerl, el binario que debes usar es wperl.exe, no perl.exe. Este binario lo encontrarás en la carpeta bin/ dentro de la distribución de ActivePerl.

En uno de nuestros hilos, en Perl ActiveState. Instalación y gestión con el PPM se comenta la instalación y uso del PPM. Hacia la mitad se hace referencia a wperl.

El trabajo de wperl es crear un proceso nuevo y matar el que generó la consola CMD, con lo que, visualmente, solo está funcionando nuestro programa Perl.

_________________
JF^D Perl programming


Nota Jue Jul 29, 2010 2:21 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 11:41 am
Mensajes: 4
Re: Función exec() y system() en Windows
Intenté ejecutando el wperl.exe y pasándole el script anterior, pero la ventana sigue apareciendo y no pude solucionarlo.

¿No habrá otra manera de hacerlo?

Desde ya, muchas gracias.


Nota Jue Jul 29, 2010 2:28 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 6886
Re: función exec() y system()
Es muy raro eso que cuentas... a todo el mundo le funciona... solo hay que ver la cantidad de enlaces que salen en Google cuando poner wperl...

¿Puedes poner, exactamente, tu código, tanto el script, como la llamada?

_________________
JF^D Perl programming


Nota Jue Jul 29, 2010 2:52 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 11:41 am
Mensajes: 4
Re: Función exec() y system() en Windows
El script es este y lo llamé 'test.pl':
Sintáxis: [ Descargar ] [ Ocultar ]
Usando Coloreado de perl
system('C:\Program Files\Notepad++\Notepad++.exe');


Luego, tomé un acceso directo y le asigné:

D:\Perl\bin\wperl.exe -S "C:\Program Files\Notepad++\test.pl"


Para que me ejecute el script, con el wperl.exe, desde el acceso directo.

Cuando le doy doble clic al acceso, me abre una ventana de linea de comando vacía, luego me abre el 'Notepad++.exe' (Que es lo que quería), pero la primer ventana queda 'en espera' y solo se cierra cuando salgo del 'Notepad++.exe'.

Tal vez la forma de ejecutar el wperl.exe no sea la correcta.
¿Hay alguna forma de que los '.pl' se ejecuten por default con el wperl.exe?.

Muchas gracias por su ayuda.


Nota Jue Jul 29, 2010 3:37 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 6886
Re: Función exec() y system() en Windows
Me ha costado encontrarlo, pero esto es lo que pasa: la ventana que ejecuta wperl SÍ que desaparece, pero el system(), lo que hace, es crear una NUEVA ventana, donde ejecutará el comando indicado (la llamada a Notepad++).

No entiendo porqué usas la bandera '-S'. No debería ser necesaria, ya que estás indicando la ruta completa al programa Perl.

Para resolverlo, puedes usar el módulo Win32::Process. Precisamente, en la sinopsis, viene un ejemplo de cómo lanzar el notepad.exe, así que te resultará muy fácil adaptarlo a lo que quieres.

En cuanto a hacer que los programas se ejecuten con wperl, en lugar de perl, lo que puedes hacer es ponerles una extensión nueva, por ejemplo .wpl, y luego decirle a Windows que asocie la apertura de esos ficheros a la ejecución de wperl (la ruta completa a wperl). Se trata de una configuración de Windows.

_________________
JF^D Perl programming


Nota Jue Jul 29, 2010 3:47 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 11:41 am
Mensajes: 4
Re: Función exec() y system() en Windows
Ahora me funcionó correctamente.

Muchas gracias, explorer, por su tiempo.


Nota Vie Jul 30, 2010 3:08 am
Avatar de Usuario
Perlero Frecuente
Registrado: Jue Ene 03, 2008 3:19 pm
Mensajes: 140
Re: Función exec() y system() en Windows
explorer escribió:
Para resolverlo, puedes usar el módulo Win32::Process

Otro módulo que hace lo mismo pero que además es portable es Proc::Background. Hace mucho que no lo uso, pero hasta donde recuerdo nunca me hizo aparecer ninguna ventanita de consola.


Responder al tema  [ 8 mensajes ] 

Reglas del Foro
No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë
phpBB SEO