Paso de parametros a programa en ejecucion

Iniciado por Lopardo, 28 Diciembre 2007, 14:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Lopardo

Hola me gustaria pasarle pararmetros a un programa en ejecucion desde Java.

Algo asi, llamo a una aplicación y luego que esta se este ejecutando ir pasandole parametros los cuales producirian salidas varias en el programa, les pongo un ejemplo:

ejecuto al ms-dos desde Java y le paso comandos como dir, cd, md , etc. hasta ahora lo único que he logrado es ejecutar el programa con algo así:

Código (java) [Seleccionar]
class Programa
{
   public ejecutarPrograma()
  {
      try
     {
       //Aqui llamo la aplicacion que deseo ejecutar en este cado Ms-Dos
       Process proceso = new Runtime.getRuntime().exec("cmd /c dir");

       //Luego redirecciono el flujo de datos (creo que se dice asi jeje)
       InputStream datos = proceso.detInputStream();
       BufferedReader str = new BufferedReader(new InputStreamReader(datos));
       

       //De aqui tomo lo que va mostrando el ms-dos
      String linea = str.readLine();
      while(linea!=null)
     {
        System.out.println(linea);
        linea = str.readLinea();
     }

     }catch(Exception exc){}

  }
}


Bueno basicamente es así, disculpa si hay algun error, no tengo el compilador a mano para probarlo, pero esa es la idea.

Ahora lo que no he logrado es poder mandarle comandos al programa en ejecución, es decir, al cmd.exe, osea ¿Como puedo mandarle un dir luego que lo alla iniciado sin tener que iniciarlo nuevamente?.

Espero me entiendan, cualquier cosa no duden en preguntar..

Saludos.
...de la sabiduría.

egyware

primero debes tener un tipo de consola donde puedas escribir
puedes usar
System.in
o inventar una (pero modo grafico eso sip)
e ir creando nuevos comandos por ejemplo
Scanner scan = new Scanner(System.in);
String read  = scan.next();
Process proceso = new Runtime.getRuntime().exec("cmd /c "+read);
//....
y no se algo asi podría ser
xauu
suerte

Ragnarok

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

Lopardo

Bueno gracias por la información pero no me ha funcionado aun... Les pongo el código a ver cual es mi error.

import java.io.*;

class ejemplo
{
    public void analizar()
{
try
{

Process proceso = Runtime.getRuntime().exec("cmd.exe");
InputStream entrada = proceso.getInputStream();
BufferedReader str = new BufferedReader(new InputStreamReader(entrada));


/*
//Primera manera
OutputStream out2 = proceso.getOutputStream();
DataOutputStream str3 = new DataOutputStream(out2);
str3.writeUTF("dir");
*/

/*
//Segunda manera
OutputStream out2 = proceso.getOutputStream();
BufferedWriter str3 = new BufferedWriter(new OutputStreamWriter(out2));
str3.write("dir");
*/

/*
//Tercera manera
OutputStream out2 = proceso.getOutputStream();
Writer str3 = new BufferedWriter(new OutputStreamWriter(out2));
str3.write("dir");
*/


String mostrar = str.readLine();
while(mostrar!=null)
{
System.out.println (mostrar);
mostrar = str.readLine();
}

}catch(Exception exc)
{
System.out.println ("Ocurrio un error");
}
}

    public static void main(String[] args)
    {
        new ejemplo().analizar();
    }
}


Bueno he intentado de estas tres maneras pero no me ha funcionado ninguna. Alguien sabe porque.. Bueno recordando lo que quiero hacer, quiero poder mandarle comandos a ms-dos desde una aplicación hecha en Java, teniendo en cuenta que la consola del ms-dos la voy a llamar una vez y una vez que este en ejecución mandarle los comandos que deseo ejecutar.

Gracias

Saludos
...de la sabiduría.

Ragnarok

¿y qué es lo que pasa?, ¿has probado a escribir en un fichero en lugar de un proceso a ver si se escribe lo que quieres?, ¿has probado a escribir en un intérprete de mandatos eso mismo a ver si hace lo que quieres?
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

Lopardo

Que pasa...

Bueno cuando ejecuto el código muetra la salida del programa  pero cuando intento mandarle algun parámetro no hace nada, como si no lo recibiera, no se porque ocurre eso, es decir, si cuando ejecuto el proceso le mando el comando todo sale bien, pero cuando intento ejecutar otro comando en este mismo proceso en ejecución no sucede nada, no se lo que esta ocurriendo.

Escribir en un fichero...

Bueno no entiendo bien esta pregunta pero si te refieres a si puedo escribir en un archivo común y corriente alguna información, eso si puedo hacerlo pero lo haría de otra manera con un método de esta manera:

 
public void escribir()
    {
    try
    {
    BufferedWriter sc = new BufferedWriter(new FileWriter("fichero.exe"));
    sc.write("Escribiendo a fichero.");
    sc.close();
   
}
catch (Exception ex)
{
System.out.println ("Error método escribir");
}
    }


Probar en un interprete de mandatos...

Bueno si te refieres al ms-dos, alli funcionan todos los comandos que quiero ejecutar. ya que lo que quiero hacer es una aplicación que haga uso del ms-dos u otro programa que se ejecute bajo ms-dos para lograr mandarle los comandos desde mi aplicacion en Java.

Bueno espero haber respondido todas tus preguntas... Espero su ayuda en esto.

Gracias.

Saludos
...de la sabiduría.

Ragnarok

Las preguntas son la ayuda.

Si en lugar de escribir esos strings en el proceso los escribes en un fichero de texto y lo que tenga el fichero de texto lo copias y pegas en un intérprete de mandatos ejecutando el programa al que quieres pasarle esas instrucciones verás que no funciona y porqué.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

Lopardo

Disculpa pero no entiendo bien lo que me planteas.

Bueno te explico lo que entiendo, me dices que en vez de mandar los parámetros directamente a la aplicación en ejecución, lo envie a un fichero de texto y luego copio lo que tiene este y abra un intérprete de mandatos osea el ms-dos y pegue allí lo que tiene el fichero... Bueno en caso que sea asi, si el fichero de texto tiene el comando "dir" y lo pego en el ms-dos, este me mostrará el contenido del directorio actual. Osea no entiendo bien lo que me dijiste, me gustaría que me explicaras nuevamente... disculpa la molestia..

Nota: los comandos se los quiero mandar de uno en uno al ms-dos.

Gracias.

Saludos.
...de la sabiduría.

Ragnarok

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

egyware

porque usas la idea de ragnarok pero envez del archivo de texto txt le pones *.bat y pruebas en una consola de msdos y vez que esta mal en tu app y luego vez como deberias arregarlo con los in y out streams
xau
suerte
ps:
te prodria salir algo asi de malo segun el ultimo post
dirclsbeepcd directc:
en vez
dir
cls
beep
cd direct
c:
acuerdate de usar \n