Página 2 de 4

Ejecutar un programa desde PL

NotaPublicado: 2009-04-28 08:20 @389
por wastudillo
Hola, muchas gracias por la respuesta. Me pongo en la tarea de hacerlo ya mismo. ¡Una pregunta! ¿Se puede ejecutar un programa cualquiera desde un programa desarrollado en PL? Por ejemplo, que dentro de una instrucción yo necesite que abra Word. No sé si será posible pero por eso le pido su ayuda. Gracias.

NotaPublicado: 2009-04-28 10:39 @485
por explorer
¿PL?

¿Qué es eso? ¿Te refieres al lenguaje de programación PL/1, o los lenguajes de base de datos de Oracle PL/SQL o de PostgreSQL (PL/PgSQL)?

Aquí, en Perl, usamos la función system(), las comillas invertidas (``) o el operador qx() y varios métodos más para arrancar programas.

Más información en perldoc perfunc y perldoc perlop.

En concreto, para Windows, hay diversas soluciones según lo que quieras hacer. Por ejemplo, en esta página tienes un ejemplo para transformar cada fichero de un directorio a fichero HTML. Usa el método de usar el protocolo OLE para intercambiar información entre aplicaciones Windows.

Mostrar ventana emergente

NotaPublicado: 2009-05-13 10:25 @476
por wastudillo
¿Qué tal? Nuevamente para molestarlos. Quisiera saber de qué manera o por medio de qué método puedo hacer que los mensajes de error o confirmación de una acción en un aplicativo de Perl se muestre en una pequeña ventana de Windows donde yo solamente tenga que darle aceptar para cerrarla después de leer el mensaje. Gracias.

NotaPublicado: 2009-05-13 18:05 @795
por proxy_lainux
Hola.

¿Por qué no intentas hacer eso haciendo una ventana con Gtk, por ejemplo? Si hay un momento donde me aparece un error, usa Gtk2::Window para crear una ventana y coloca el mensaje allí, y si presionas un botón que haga algo, en el caso de que el mensaje sea para alguna acción.

salu2

NotaPublicado: 2009-05-13 18:22 @807
por explorer
wastudillo: es mejor empezar hilos nuevos, sobre todo si no tienen que ver con el título y tema del hilo actual.

En cuanto a lo que quieres, creo que se puede resolver con una simple caja de alerta. Con el módulo Win32::GUI se puede hacer.

Mostrar mensaje de error en ventana

NotaPublicado: 2009-05-26 07:09 @339
por wastudillo
Hola, ¿qué tal?

Gracias por el interés pero la verdad no entendí mucho lo que me dicen; además coloco GTk2::Window y me sale un error pero quisiera explicarles un poco mejor lo que necesito.

Por ejemplo, cuando estoy extrayendo un archivo por FTP y el programa no encuentra dicho archivo entonces me debe mostrar una pequeña ventana indicándome el mensaje de error (o también de confirmación) por mí especificado; el usuario solamente debe hacer clic en OK por ejemplo y se cierra la ventana de tal manera que el usuario tenga tiempo de ver el error antes de que el programa termine y se cierre automáticamente.

No sé si será mucho pedir pero aquí les muestro un pedazo del programa y dónde necesito que muestre la ventana:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $FTP = Net::FTP->new($SERVER) or die ("No se puede abrir la conexión");# aquí también
$FTP->login($name,$pass);
$FTP->binary ();
$FTP->hash ();
my @archivos = $FTP->ls();
foreach my $archivo (@archivos){
    $FTP->get($archivo);
    print "Archivo $archivo copiado\n"; # este es el mensaje
}
$FTP->quit();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Muchas gracias.

NotaPublicado: 2009-05-26 19:19 @846
por creating021
proxy_lainux escribiste:¿Por qué no intentas hacer eso haciendo una ventana con Gtk, por ejemplo?

Porque instalar GTK2 requiere instalar Gtk+, Pango, Glib, Cairo y otras cosas... que Windows no trae, yo usaría otra librería como la que dice explorer (Win32::GUI) o Prima, ya que tiene menos dependencias.
wastudillo escribiste:coloco GTk2::Window y me sale un error

GTk2 != GTK2
Suponiendo que ese es el error, ya que no lo comentas.

Bien, el asunto es que sí se puede hacer, y es muy simple:
Primero creamos una función que imprima el diálogo, ésta deberá recibir un argumento... el mensaje (de error o de confirmación).


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# use Prima qw(Application MsgBox);
sub MiDialogo {
    my $msg = shift; # argumento.
    Prima::MsgBox::message($msg, mb::Ok);
}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Luego, en el código que tenías, agregamos algo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $FTP = Net::FTP->new($SERVER) or die ("No se puede abrir la conexión");# aquí también
$FTP->login($name,$pass);
$FTP->binary ();
$FTP->hash ();
my @archivos = $FTP->ls();
foreach my $archivo (@archivos){
    $FTP->get($archivo) or do {
        MiDialogo( $FTP->message() );
        next; # Seguimos con el siguiente elemento del bucle
    };
    MiDialogo( "Archivo $archivo copiado" );
    print "Archivo $archivo copiado\n"; # este es el mensaje
}
$FTP->quit();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es una forma simple y rápida... que se puede mejorar :wink:

Mostrar mensaje confirmación o error en una ventana

NotaPublicado: 2009-05-27 06:38 @318
por wastudillo
Buenos días.

Les comento que me sale el siguiente error y no pude ver el funcionamiento del código, y otra cosa: no sé si lo estoy haciendo bien. En el lugar donde necesito que me salga el mensaje simplemente coloco algo como esto MiDialogo ("mensaje de error o confirmacion"); ¿O requiere de algo más?

Este es el mensaje de error:

Código: Seleccionar todo
Can't locate Prima.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at extraer_archivos.pl line 10.
BEGIN failed--compilation aborted at extraer_archivos.pl line 10.


Muchas gracias por la ayuda.

NotaPublicado: 2009-05-27 06:49 @325
por explorer
El error dice que Perl no es capaz de encontrar el módulo Prima, así que entonces suponemos que no está instalado.

Módulo prima

NotaPublicado: 2009-05-27 13:32 @606
por wastudillo
Perdón por la ignorancia, ¿cómo lo instalo?