• Publicidad

Función exec() y system() en Windows

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

Función exec() y system() en Windows

Notapor Harvest » 2010-07-29 12:11 @549

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 ]
Using perl Syntax Highlighting
system('C:\Program Files\Notepad++\Notepad++.exe');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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.
Harvest
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-07-29 11:41 @528

Publicidad

Re: Función exec() y system() en Windows

Notapor explorer » 2010-07-29 13:09 @589

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 & 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: Función exec() y system() en Windows

Notapor Harvest » 2010-07-29 14:21 @639

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.
Harvest
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-07-29 11:41 @528

Re: función exec() y system()

Notapor explorer » 2010-07-29 14:28 @644

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 & 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: Función exec() y system() en Windows

Notapor Harvest » 2010-07-29 14:52 @661

El script es este y lo llamé 'test.pl':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system('C:\Program Files\Notepad++\Notepad++.exe');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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.
Harvest
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-07-29 11:41 @528

Re: Función exec() y system() en Windows

Notapor explorer » 2010-07-29 15:37 @692

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 & 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: Función exec() y system() en Windows

Notapor Harvest » 2010-07-29 15:47 @699

Ahora me funcionó correctamente.

Muchas gracias, explorer, por su tiempo.
Harvest
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-07-29 11:41 @528

Re: Función exec() y system() en Windows

Notapor salva » 2010-07-30 03:08 @172

explorer escribiste: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.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado