Author Topic: Consola de windows con Perl  (Read 36705 times)

miguialberto

  • Jr. Member
  • **
  • Posts: 54
  • Karma: 0
    • View Profile
Consola de windows con Perl
« on: Julio 25, 2008, 09:30:38 am »
Hola,

Pues aqui va la primera consulta "real" sobre Perl  :).

Tengo que hacer un pequeno script en Perl que me permita ejecutar comandos por la consola de windows. La idea del script es que al ejecutar la consola se conecte con una base de datos y alli realice una serie de operaciones. Luego tiene que salir y listo.

Me han dicho que lo haga en Perl porque era una manera interesante de empezar a iniciarme en este mundo, aunque tambien habia pensado en hacerlo en VBScript. La verdad es que ando bastante perdido en la programacion con windows, asi que cualquier ayuda se agradecera.

La verdad es que no se si existe alguna manera de poderme comunicar con un proceso sin utilizar la consola y pasarle las instrucciones directamente...

Gracias de antemano!

Ciao

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Consola de windows con Perl
« Reply #1 on: Julio 25, 2008, 11:11:23 am »
Hola:

perl es muy potente como "lenguaje de script", es decir, algo así como "comandos" nuevos que hacen cosas. Me explico. Abres una ventana de ms-dos y podrías escribir cosas como

c:\> miscript.pl .jpg .jpeg

que coge, por ejemplo, y cambia  todos los ficheros con extensión jpg por jpeg. Por supuesto, puedes conectarte a base de datos y hacer cosas ahí y hacer scripts complejos que sean verdaderos programas con toda su funcionalidad.

De todas formas, el lenguaje debería elegirse en función de lo que quieras hacer. Me despista un poco lo de "ejecutar la consola" y "comunicar un proceso sin utilizar la consola". ¿Qué es la consola?

Se bueno.

miguialberto

  • Jr. Member
  • **
  • Posts: 54
  • Karma: 0
    • View Profile
Re: Consola de windows con Perl
« Reply #2 on: Julio 25, 2008, 12:06:18 pm »
Hola,

Lo que quiero decir con consola es el cmd.exe de windows...creo que me he colado, es linea de comandos?. Lo que tendria que hacer a mano y que quiero hacer con el script es borrar cada noche una serie de datos de una base de datos que esta corriendo en windows. Para ello abro la linea de comandos de windows, me logueo en la BD y entro en la consola o linea de comandos de la BD.

Lo que quiero con el scrip es poder ejecutar automaticamente esta accion, y lo que intento buscar es como ejecutar comandos de la linea de comandos de windows en el scrip de Perl.

He mirado algunas librerias de Perl para Win32, como win32::Api, console..pero no estoy seguro si voy por el buen camino...me da que existe una manera mas facil.

Gracias de nuevo!

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Consola de windows con Perl
« Reply #3 on: Julio 25, 2008, 03:55:09 pm »
Hola:

Puedes hacerlo con

Code: [Select]
system ('comando');
system ('c:/ruta/comando.exe');

Si quieres guardar el resultado, puedes hacer cosas como (ojo al sentido de la comilla simple)

Code: [Select]
my $listado = `dir`;

Se bueno.

« Last Edit: Julio 25, 2008, 04:00:27 pm by chuidiang »

miguialberto

  • Jr. Member
  • **
  • Posts: 54
  • Karma: 0
    • View Profile
Re: Consola de windows con Perl
« Reply #4 on: Julio 25, 2008, 04:12:03 pm »
Muchas gracias!

Me esta dejando asombrado Perl por la flexibilidad y facilidad que tiene para programar!

Ciao!

miguialberto

  • Jr. Member
  • **
  • Posts: 54
  • Karma: 0
    • View Profile
Re: Consola de windows con Perl
« Reply #5 on: Julio 28, 2008, 09:59:01 am »
Hola de nuevo,

La verdad es que pensaba que con el post anterior me valia para hacer lo que queria, pero me he vuelto a quedar atascado.

Necesito crear una comunicacion bidireccional con la shell de windows ( o la linea de comandos). Como comente en el anterior post, lo que quiero es conectarme a una BD mediante la linea de comando y hacer una serie de operaciones.

El problema que tengo es que probando la funcion "system" en efecto puedo ejecutar cmd.exe pero luego no se como poder mantener una "conversacion" con la shell. Por ejemplo me gustaria poder ejecutar cmd.exe, hacer "cd..", intentar mirar todos los archivos que son "*.doc" e intentar borrar el primero que encuentre con "deldir". Es decir, lo que quiero es ejecutar una serie de comandos continuados en la shell y ademas ver lo que me responde la shell (si hay algun archivo o no en un directorio por ejemplo).

He estado mirando como hacer esto, pero la verdad es que me sigo perdiendo. No se si debo intentar hacer un "fork()" para crear un proceso "cmd.exe" y poder comunicarme con el mediante un descriptor, y tratarlo como un fichero. O si exite alguna manera de encadenar la funcion "system" o "exec" sin perder el estado de la shell...en fin, que cualquier ayuda sera de nuevo agradecida!

Muchas gracias de nuevo!

ciao!

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Consola de windows con Perl
« Reply #6 on: Julio 28, 2008, 12:41:59 pm »
Hola:

Perl tiene funciones que permiten manejar ficheros: crear directorios, borrarlos, borrar ficheros, etc. ¿Por qué no usas esas funciones en vez de hacer una shell?

http://perldoc.perl.org/index-functions.html

Se bueno.

Willie

  • Newbie
  • *
  • Posts: 24
  • Karma: 0
    • View Profile