elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [?] Dirigir salida bucle hacia comando linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Dirigir salida bucle hacia comando linux  (Leído 3,295 veces)
HardC0d3

Desconectado Desconectado

Mensajes: 49



Ver Perfil
[?] Dirigir salida bucle hacia comando linux
« en: 24 Julio 2017, 05:23 am »

Buenas foro !!

Estoy haciendo una aplicación en Java que corre sobre Linux y no se como implementar la siguiente parte, a ver si me pueden orientar:

Me gustaría que al generar una serie de palabras dentro de un bucle, éstas se pasaran a través de un pipe hacia un comando en Linux (  palabra1 | wc -c ), de forma que "wc -c" tratara con cada una de esas palabras, por ejemplo:

Código
  1. String nombre = "pepito";
  2.  
  3. for( int i = 0; i < 100; i++ ){
  4.  
  5.     System.out.println( nombre+i ); //hacia--->  | wc -c
  6. }

Lo he intentado con "Runtime.getRuntime().exec(comando)" dentro del bucle pero ni funciona ni es eficiente (o algo hago mal), a demás, que creo que estaría ejecutando el comando tantas veces como se repite el bucle y no sería apropiado. ¿Habría que usar BufferedOutputStream o algo similar?

Gracias de antemano.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [?] Dirigir salida bucle hacia comando linux
« Respuesta #1 en: 26 Julio 2017, 21:50 pm »

Casi lo tenías :D!
Código
  1. Runtime.getRuntime().exec()
El método exec retorna un Process. Lo puedes ver aquí: https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
Y bueno, el Process tiene estos métodos: https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html
Te interesan los métodos getInputStream y getOutputStream. Una vez tengas el outputStream de tu primer proceso y el inputStream del segundo, puedes leer del input y escribirlo en el output.
Y luego supongo que querrás coger el output del segundo proceso para analizarlo o lo que quieras hacer con él.

En principio, así debería funcionar. Nunca hice esto en Java, así que si hay algún problema, coméntalo.


En línea

HardC0d3

Desconectado Desconectado

Mensajes: 49



Ver Perfil
Re: [?] Dirigir salida bucle hacia comando linux
« Respuesta #2 en: 27 Julio 2017, 02:14 am »

Gracias por responder ivancea96 !!

He seguido tus consejos y después de 4 largas horas me ha salido  ;-) , ¡¡que subidón llevo joder jaja !!

Bueno, al final ha quedado así la cosa:

Código
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.io.IOException;
  6.  
  7. public class SalidaBucleAComando{
  8.  
  9.    public static void main(String[] args) {
  10.  
  11.        String[] animal = {"gato", "perro", "trige", "leon"};
  12.  
  13. Process echo;
  14. Process wc;
  15.  
  16. BufferedReader echoOut;
  17.  
  18.  
  19. for( int i = 0; i < animal.length; i++ ){
  20.    for( int j = 0; j < 100; j++ ){ // A CADA ANIMAL LE ASIGNO 100 NUMEROS
  21.        try {
  22.  
  23.    echo = Runtime.getRuntime().exec("echo "+animal[i]+j);
  24.    wc = Runtime.getRuntime().exec("wc -c");
  25.  
  26.    // FLUJO DE SALIDA DEL COMANDO ECHO
  27.    echoOut = new BufferedReader(new InputStreamReader(echo.getInputStream()));
  28.  
  29.    // FLUJO DE SALIDA Y DE ENTRADA DEL COMANDO WC
  30.    wcOut = new BufferedReader(new InputStreamReader(wc.getInputStream()));
  31.    wcIn = new BufferedWriter(new OutputStreamWriter(wc.getOutputStream()));
  32.  
  33.    // ESCRIBO EN LA ENTRADA DE WC LA SALIDA QUE ME DA ECHO ( -> ECHO X | WC -C )
  34.    wcIn.write(echoOut.readLine());
  35.    wcIn.close(); // CIERRO FLUJO DE ESCRITURA
  36.  
  37.    System.out.println(wcOut.readLine()); // IMPRIMO RESULTADO DE "ECHO X | WC -C"
  38.  
  39.  
  40.        } catch (IOException e) {
  41.    System.out.println("Error al ejecutar");
  42.    System.exit(-1);
  43. }
  44.  
  45.  
  46.    }
  47. }
  48.  
  49. System.exit(0);
  50.    }
  51. }
  52.  

Gracias de nuevo !!
« Última modificación: 27 Julio 2017, 02:34 am por HardC0d3 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer salida de un comando en MASM
ASM
.:UND3R:. 1 2,688 Último mensaje 23 Enero 2015, 12:53 pm
por Eternal Idol
[Bash] Error al recoger salida de un comando
Scripting
MeCraniDOS 0 1,964 Último mensaje 22 Febrero 2015, 19:58 pm
por MeCraniDOS
Salida comando Ping
Scripting
victorperezmon 1 2,845 Último mensaje 22 Marzo 2016, 19:27 pm
por Zomkar
Ayuda para formatear salida de un comando
Scripting
Last_squat 2 3,000 Último mensaje 16 Mayo 2018, 14:12 pm
por Last_squat
Como frenar un bucle for con un bucle while en bash linux
Scripting
mario290386 0 2,364 Último mensaje 5 Mayo 2019, 13:58 pm
por mario290386
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines