30 mar. 2010

Conexiones remotas por ssh desde python

Con el módulo paramiko se puede crear conexiones ssh a equipos remotos, el siguiente ejemplo muestra como establecer dicha conexión con la ejecución de un comando de forma remota:

#Se importa el modulo que permite establecer conexiones ssh
import paramiko

#Se crea la conexion con el cliente ssh
ssh = paramiko.SSHClient()

#Se define la politica de intercambio de llaves del ssh
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#Se establece la conexion remota pasando la direccion IP, el nombre
#y clave del usuario
ssh.connect('192.168.33.46', username='ernesto',password="wxyz")
#Se ejecuta el comando de forma remota
stdin, stdout, stderr = ssh.exec_command("cd bin;ls -l")
#Se muestra el resultado del comando
listado =stdout.readlines()
for i in listado: print i
#Se cierra la sesion de ssh
ssh.close()


A continuación se muestra el resultado de la ejecución del script:
ernesto@canaima:~/bin/python$ python py-ssh.py
total 4444
-rw-r--r-- 1 ernesto ernesto 39462 nov 9 14:50 a01.svg
-rwxr-xr-x 1 ernesto ernesto 16820 nov 9 14:49 a01.top
-rwxr-xr-x 1 ernesto ernesto 16820 nov 9 14:51 A01.TOP
-rw-r--r-- 1 ernesto ernesto 10440 nov 9 14:52 a02.svg
-rwxr-xr-x 1 ernesto ernesto 4382 nov 9 14:51 a02.top
-rwxr-xr-x 1 ernesto ernesto 32 nov 9 14:51 a03.top
-rw-r--r-- 1 ernesto ernesto 2379 oct 8 15:55 ej5.py
drwxr-xr-x 13 ernesto ernesto 4096 oct 28 16:43 firefox
lrwxrwxrwx 1 ernesto ernesto 15 feb 8 07:54 Firefox -> firefox/firefox
-rw-r--r-- 1 ernesto ernesto 33662 nov 27 17:17 hola.c
-rw-r--r-- 1 ernesto ernesto 37 nov 27 17:17 hola.py
drwxr-xr-x 2 ernesto ernesto 4096 dic 3 11:29 lenguajeC
drwxr-xr-x 2 ernesto ernesto 4096 dic 25 07:48 lv
-rw-r--r-- 1 ernesto ernesto 3640 oct 18 14:20 Matematica_Braille.py
-rw-r--r-- 1 ernesto ernesto 33792 oct 18 14:12 Matematica_libglade.glade
-rwxr-xr-x 1 ernesto ernesto 39 oct 5 22:35 prueba.py
drwxr-xr-x 19 ernesto ernesto 4096 feb 21 20:31 python
-rw-r--r-- 1 ernesto ernesto 4318141 nov 9 14:50 sys
-rwxr-xr-x 1 ernesto ernesto 4261 nov 9 14:53 top2sv
-rwxr-xr-x 1 ernesto ernesto 1051 nov 9 14:48 top2svg.py
drwxr-xr-x 3 ernesto ernesto 4096 nov 9 14:53 top2svg-v0.2

Reproduciendo texto desde python

Existe un módulo en python que permite reproducir texto directamente desde el código python sin necesidad de ejecutar un comando externo; este módulo se llama pyttsx.

Para instalarlo se ejecuta easy_install:
easy_install pyttsx

Ahora ya se puede probar el módulo:
#!/usr/bin/env python
#Se importa el modulo
import pyttsx
#Se inicia el motor de voz
engine = pyttsx.init()
#Se selecciona el idioma a utilizar
engine.setProperty('voice', "spanish-latin-american")
#Se genera la voz a partir de un texto
engine.say('Esta es una prueba de reproduccion de texto')
engine.say('fin')
#Se reproduce la voz
engine.runAndWait()

Esto reproducirá el contenido definido en el código, a continuación se reproducirá el contenido de un pdf basandose en la publicación anterior y esta:

#!/usr/bin/env python
"""
Nombre: pdf2voz
Descripcion: Programa que reproduce el contenido de un pdf
Autor: Ernesto Crespo
Correo: ernesto@crespo.org.ve
Licencia: GPL v3
Version de prueba para definir la construccion del reproductor
"""
import pyttsx
#Importar modulo de lectura de pypdf
from pyPdf import PdfFileReader
#Inicia el motor de reproduccion de texto a voz
engine = pyttsx.init()
#Se define el Idioma a reproducir
engine.setProperty('voice', "spanish-latin-american")
#Capturar el archivo pdf a leer
input1 = PdfFileReader(file("tut.pdf", "rb"))
#Capturar la cantidad de paginas que tiene el documento
paginas = input1.getNumPages()
titulo =input1.getDocumentInfo().title
#Captura la pagina inicial del pdf
pagina1 = input1.getPage(0)
#Captura el autor del documento pdf
autor =input1.getDocumentInfo().author
#Extrae el texto de la pagina inicial del documento pdf
texto = pagina1.extractText()
#Reproduccion de la informacion del pdf
engine.say("El titulo de libro es %s" %titulo)
engine.say("La cantidad de paginas del libro son %s" %paginas)
engine.say("El autor del documento es %s" %autor)
engine.say("El texto de la pagina inicial es")
engine.say(texto)
engine.runAndWait()


Ahora queda trabajar en el programa que generalice la reproducción de documentos pdf, defina las páginas que quiera reproducir, el volumen, el idioma entre otras opciones.

29 mar. 2010

Capturando el contenido de un pdf desde python

Desde hace tiempo conocía de la posibilidad de capturar información de un pdf, la idea final es lograr tomar esta información y reproducirla con espeak.
El siguiente ejemplo muestra el uso del módulo pypdf.


#Importar modulo de lectura de pypdf
from pyPdf import PdfFileReader

#Capturar el archivo pdf a leer
input1 = PdfFileReader(file("tut.pdf", "rb"))

#Capturar la cantidad de paginas que tiene el documento
paginas = input1.getNumPages()
#Capturar el titulo del pdf
titulo =input1.getDocumentInfo().title
#Captura la pagina inicial del pdf
pagina1 = input1.getPage(0)
#Captura el autor del documento pdf
autor =input1.getDocumentInfo().author
#Extrae el texto de la pagina inicial del documento pdf
texto = pagina1.extractText()
print "El libro se llama : %s" %titulo
print "El autor es: %s" %autor
print "La cantidad de paginas del libro es: %s " %paginas
print "El contenido de la pagina inicial es:"
print texto

El resultado de este script es el siguiente:
El libro se llama : Guía de aprendizaje de Python
El autor es: Guido van Rossum, Fred L. Drake, Jr., editor
La cantidad de paginas del libro es: 77
El contenido de la pagina inicial es:
GuíadeaprendizajedePythonRelease2.0GuidovanRossumFredL.Drake,Jr.,editor16deoctubrede2000BeOpenPythonLabsCorreoelectrónico:python-docs@python.org


En el siguiente artículo explicare ya el uso del conversor de audio de la información capturada del pdf.

AddThis