Python - ejecutar_subprocesos en python

 
Vista:

ejecutar_subprocesos en python

Publicado por joana (1 intervención) el 06/11/2006 18:32:04
OS EXPLICO UN POCO LO QUE QUIERO HACER:
PRETENDO EJECUTAR UN PROGRAMA LEMATIZADOR DE TEXTO DESDE UNA FUNCION EN PYTHON. ES DECIR TENGO EN WINDOWS EL PROGRMA LLAMADO FREELING-1.4 Y PARA QUE LEMATICE EL TEXTO HAY QUE HACERLO ASI:
'C:/FreeLing-1.4/analyzer -f C:/FreeLing -1.4/data/config/es.cfg<'+texto
POR LO QUE EJECUTO EL PROGRAMA COMO SI DE UN SUBPROCESO SE TRATASE Y RECOJO LOS RESULTADOS EN TRES FICHEROS.
YO REALMENTE NECESITO IMPRIMIR EL FICHERO PO(EL DE OUT) EN PANTALLA, MAS QUE NADA PARA VER LOS DATOS FORMATO. . . POR ESO ME HE HECHO ESTA OTRA FUNCION:

import sys, popen2

def lematizar(texto)

command='C:/FreeLing-1.4/analyzer -f C:/FreeLing -1.4/data/config/es.cfg<'+texto

po,pi,pe=popen2.popen3(command)

print po.readlines()

y el resultado no es el que realmente esperaba, me devuelve como si el fichero creado estuviera vacio exactamente esto: [] sabeis que estoy haciendo mal????? Tambien he probado a abrir el fichero leer y luego cerrarlo y el resultado es el mismo.

MUCHAS GRACIAS



JOANA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ejecutar_subprocesos en python

Publicado por Lautaro Matas (1 intervención) el 27/05/2008 00:55:08
Joana

El problema la forma en que estás usando popen, dado que lo que hace es crear un subproceso y comunicarse con el a través de pipes. Yo no lo he usado en windows, así que no se si funciona pero en linux debería ser algo así:

import sys, popen2

def lematizar(texto)
command='C:/FreeLing-1.4/analyzer -f C:/FreeLing -1.4/data/config/es.cfg'
pi,po =popen2.popen2(command)

# aqui alimentas al pipe de entrada
pi.write()
# cierras el pipe, dado que analyzer esperará el EOF
pi.close()

# lees el resultado del pipe de salida
lemas = po.read()

# cierras el pipe de salida
po.close()

return lemas

Esto me ha funcionado, aunque desconozco si es la mejor forma de hacerlo. Espero que te sea util.
Saludos

Lautaro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar