Crear Front End, como obtener datos del programa en Consola

Pues estoy pensando en hacer un Front End en QT para un programa en consola. Pero me surge la duda de como puedo ir obteniendo los datos que va devolviendo el programa en consola (porcentaje completado, tiempo, velocidad...) e ir actualizando los datos en el Front End.
¿Alguien me guía un poco?
elchicosinhada escribió:Pues estoy pensando en hacer un Front End en QT para un programa en consola. Pero me surge la duda de como puedo ir obteniendo los datos que va devolviendo el programa en consola (porcentaje completado, tiempo, velocidad...) e ir actualizando los datos en el Front End.
¿Alguien me guía un poco?


No mencionas ningún lenguaje en especial, pero creo que la mejor solución seria utilizar Python.

Puedes usar el método Popen de subprocess:

import subprocess
proceso = subprocess.Popen("nmap -p22 -sV -v google.es", shell=True, stdout=subprocess.PIPE)
print proceso.stdout.readline() # leer primera linea
Ups, cierto...
Bueno, me gustaría usar C++ con QT
elchicosinhada escribió:Ups, cierto...
Bueno, me gustaría usar C++ con QT


Usa popen() que devuelve un puntero para poder escribir y leer el pipe.

Un ejemplo rápido:

#include <stdio.h>

p = popen("ls", "r"); /* popen ejecuta el comando en otro subproceso (fork()) */
if(!p) ...

fgets(....) /* leer stdout */

if(p.close() < 0) ... /* hemos terminado, cerramos */
Según veo, lo uso como si fuese un fichero...
Interesante, gracias ;)
Vale, me ha surgido un problema.
Algunos programas no envían el texto a la salida estándar, como el wget cuando está descargando (sí lo hace cuando muestra el mensaje de error al no pasarle url). ¿Alguna sugerencia?
elchicosinhada escribió:Vale, me ha surgido un problema.
Algunos programas no envían el texto a la salida estándar, como el wget cuando está descargando (sí lo hace cuando muestra el mensaje de error al no pasarle url). ¿Alguna sugerencia?


Tendrás que redirigir stderr.

p = popen("ls 2>&1", "r");
O hacerlo bien con fork, exec y pipe.

Saludos.
amuchamu escribió:
elchicosinhada escribió:Vale, me ha surgido un problema.
Algunos programas no envían el texto a la salida estándar, como el wget cuando está descargando (sí lo hace cuando muestra el mensaje de error al no pasarle url). ¿Alguna sugerencia?


Tendrás que redirigir stderr.

p = popen("ls 2>&1", "r");


Chachi, usando stderr va perfecto ;)
8 respuestas