miércoles, 6 de marzo de 2013

Mostrar salida de la terminal en python

Cuando tu programa necesita mostrar las salidas que da la terminal al ejecutar un comando, debes usar subprocess

para ello tenemos el siguiente código

import subprocess,sys


def mostrar_salida_comando(self,comando):
    proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
    while True:
        next_line = proceso.stdout.readline()
        if next_line == '' and proceso.poll() != None:
            break
        sys.stdout.write(next_line)
        sys.stdout.flush()

nada mas nos queda ubicar next_line en donde queramos que la salida sea mostrada.

miércoles, 27 de febrero de 2013

Búsqueda con patrones y re, mostrar resultados en grupos ( expresiones regulares)

En de terminados casos nos encontramos con el problema de buscar una cierta cadena de texto o números que son precedidos o antecedidos por ciertos caracteres  en una linea o texto, o simplemente reordenar los datos como lo es  por ejemplo tomar la fecha.

tenemos la siguiente cadena en la linea de ejemplo

cadenafecha="hoy es 28 de febrero de 2013"

y nosotros queremos obtener el dia 28 febrero y 2013

para ello generamos un patrón

meses="enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre"
patron= "hoy es (\d{1,2}) de ("+meses+") de (\d{4})"
Con esto, lo que esté dentro de los paréntesis sera el objetivo:
\d porque es un número
{1,2} el tamaño de ese número entre 1 y 2 dígitos
("+meses+") Cualquiera de los meses
 y nuevamente un número, esta vez exclusivamente de 4 dígitos


ahora ejecutamos la búsqueda


busqueda=re.search(patron, cadenafecha)
fecha=busqueda.groups()[2]+"-"+busqueda.groups()[1]+"-"+busqueda.groups()[0]

Esto nos imprimira:

2013-febrero-28

re.search nos arroja un arreglo con los 3 objetivos (los () ), por lo que podemos ubicarlos y asignarlos según el orden en que fueron llamados, dándo el número del objetivo que deseemos usar( a partir del 0)
busqueda.groups()[2]
en este caso 2013 que corresponde al último objetivo.

Para más objetivos y casos particulares visten ésta página o dejen un comentario

saludos