Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Lopardo en 28 Diciembre 2007, 14:16 pm



Título: Paso de parametros a programa en ejecucion
Publicado por: Lopardo en 28 Diciembre 2007, 14:16 pm
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
  1. class Programa
  2. {
  3.   public ejecutarPrograma()
  4.  {
  5.      try
  6.     {
  7.       //Aqui llamo la aplicacion que deseo ejecutar en este cado Ms-Dos
  8.       Process proceso = new Runtime.getRuntime().exec("cmd /c dir");
  9.  
  10.       //Luego redirecciono el flujo de datos (creo que se dice asi jeje)
  11.       InputStream datos = proceso.detInputStream();
  12.       BufferedReader str = new BufferedReader(new InputStreamReader(datos));
  13.  
  14.  
  15.       //De aqui tomo lo que va mostrando el ms-dos
  16.      String linea = str.readLine();
  17.      while(linea!=null)
  18.     {
  19.        System.out.println(linea);
  20.        linea = str.readLinea();
  21.     }
  22.  
  23.     }catch(Exception exc){}
  24.  
  25.  }
  26. }

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.


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: egyware en 28 Diciembre 2007, 14:52 pm
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


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Ragnarok en 28 Diciembre 2007, 23:26 pm
http://java.sun.com/javase/6/docs/api/java/lang/Process.html#getOutputStream()
http://java.sun.com/javase/6/docs/api/index.html?java/io/OutputStream.html
http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html
http://java.sun.com/javase/6/docs/api/java/io/DataOutputStream.html

Y así puedes escribir datos (principalmente strings, que es lo que te interesa) en el stream de entrada del proceso que estás ejecutando.


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Lopardo en 31 Diciembre 2007, 18:21 pm
Bueno gracias por la información pero no me ha funcionado aun... Les pongo el código a ver cual es mi error.

Código:
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


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Ragnarok en 31 Diciembre 2007, 18:33 pm
¿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?


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Lopardo en 1 Enero 2008, 18:17 pm
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:

Código:
  
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


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Ragnarok en 1 Enero 2008, 19:45 pm
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é.


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Lopardo en 3 Enero 2008, 03:53 am
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.


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Ragnarok en 3 Enero 2008, 16:09 pm
¿no debería poner algo como "dir\n"?


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: egyware en 3 Enero 2008, 16:45 pm
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


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Lopardo en 5 Enero 2008, 00:47 am
Bueno entiendo lo que me dicen pero recuerden que si le mando al ms-dos "dir\n" eso no cambiaría de línea, en Java el "\n" si ocaciona un salto de línea pero en ms-dos como se representa esto?, aun no se. Es decir según lo que se ha dicho hasta ahora el problema sería que al mandarle los comandos al ms-dos este solo los recibe pero no los interpreta ya que no se presiona enter, bueno algo asi. Ahora el problema es como mandarle el comando en conjunto con algún caracter que éste entienda como un "enter". Bueno espero me puedan ayudar.

Nota: intente mandarle "dir\n" pero el resultado era el mismo, es como que no asimila el comando por lo tanto no hace nada.

Saludos.


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: Ragnarok en 5 Enero 2008, 18:47 pm
Pues no sé exactamente cómo sería, el final de línea se indica de forma diferente en windows y en linux, entre otras cosas. Si encuentras el código fuente de alguno de estos dos proyectos sería lo que quieres hacer:

http://fedora.info/download/2.2.1/javadocs/fedora/utilities/ExecUtility.html
http://www.mmbase.org/development/api/1.6/org/mmbase/util/externalprocess/ProcessFactory.html


Título: Re: Paso de parametros a programa en ejecucion
Publicado por: egyware en 7 Enero 2008, 14:09 pm
es el mismo el final de linea y porque no intentas hacer flush al outstream
oser out.flush();