Jue Jul 29, 2010 12:11 pm |
|
|
Harvest
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: 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.
|
Jue Jul 29, 2010 1:09 pm |
|
|
 |
explorer
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
|
Jue Jul 29, 2010 2:21 pm |
|
|
Harvest
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.
|
Jue Jul 29, 2010 2:52 pm |
|
|
Harvest
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': 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.
|
Jue Jul 29, 2010 3:37 pm |
|
|
 |
explorer
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
|
Jue Jul 29, 2010 3:47 pm |
|
|
Harvest
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.
|
Vie Jul 30, 2010 3:08 am |
|
|
 |
salva
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::ProcessOtro 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.
|
|
Página 1 de 1
|
[ 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
|
|
Socializa |
 |
|