Sigue: Paso de comandos a un programa desde Python
Tomás Javier Robles Prado
tjavier en usuarios.retecal.es
Mie Sep 11 00:11:57 CEST 2002
Gracias por vuestra ayuda! , ya pensaba que tenía que hacerlo en C
(brrrrrrrrr)
Aquí os posteo el código que escribí gracias a vuestras sugerencias. Aún no
hace nada, pero establece una capa python entre overnet y el usuario. Ahora
la cosa es afinar y añadir funcionalidades, pero lo que se me atragantaba
está arreglado.
#!/usr/bin/env python2
#Control de overnet
OVERNET = "./overnet0.29.1"
import popen2
import time
import os
import stat
def fichero_nodos (ruta , entrada, salida):
"Toma un fichero de nodos y los introduce en overnet"
f = file (ruta, 'r')
lineas = f.readlines()
for linea in lineas:
comando = linea
ejecuta_comando (comando,entrada,salida)
def ejecuta_comando (comando, entrada,salida):
"Ejecuta el comando dado devolviendo la salida de overnet"
if os.fork():
#Proceso Padre
os.wait()
return salida_datos(salida)
else:
#Proceso Hijo
entrada_datos (entrada, comando)
os._exit(0)
def entrada_datos (entrada, comando):
"Introduce 'comando' en la tuber -bía" -A
os.write (entrada.fileno(),comando)
def salida_datos (salida):
"Devuelve la salida de overnet ante cierto comando"
lin = ''
while 1:
cant = os.fstat(salida.fileno())[stat.ST_SIZE]
if cant == 0:
break
lin = lin + salida.read(cant)
return lin
def modo_transparente(entrada,salida):
"Simula el comportamiento habitual de overnet"
comando = ''
while comando != 'Quit\n' :
comando = raw_input ('> ')
comando = comando + '\n'
print ejecuta_comando (comando,entrada,salida)
print ejecuta_comando ('q\n' ,entrada,salida)
print ejecuta_comando ('y\n' ,entrada,salida)
def main ():
#Abrimos overnet
salida, entrada = popen2.popen4 (OVERNET, 2048,'t')
#Pasamos un fichero de nodos a overnet
fichero_nodos ('nodes.txt',entrada, salida)
modo_transparente(entrada,salida)
if __name__ == '__main__':
main()
De nuevo, gracias a todos :)
--
Un saludo,
T. Javier Robles Prado tjavier en usuarios.retecal.es
http://users.servicios.retecal.es/tjavier
Más información sobre la lista de distribución Python-es