Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ejecutar programa externo desde Java (UNIX)- problema

Estas en el tema de Ejecutar programa externo desde Java (UNIX)- problema en el foro de Programación General en Foros del Web. Hola a todos, Estoy intentando ejecutar un programa externo desde Java, pero resulta que éste no se ejecuta. La aplicación java no dá error. Termina ...
  #1 (permalink)  
Antiguo 09/12/2008, 12:12
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Ejecutar programa externo desde Java (UNIX)- problema

Hola a todos,

Estoy intentando ejecutar un programa externo desde Java, pero resulta que éste no se ejecuta. La aplicación java no dá error. Termina correctamente pero despues veo que mi programa externo no se ejecutó.
Probé colocar en lugar de mi programa externo un comando por como por ejemplo el "ls" y este funciona correctamente. Tambien probe poner explicitamente el comando ls -l|grep `date '+%m/%d/&y'` que es el que necesito ejecutar desde java pero ocurre lo mismo (el programa java termina, sin errores aparentes y no ejecuta la instrucción. Esto compilando con SDK 1.4 por si sirve de algo este dato..

La porción de código que utilizo para ejecutar mi comando es:

public static void main(String[] args) {

try{
Runtime obj = Runtime.getRuntime();

Process p = obj.exec("miprogUnix");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = null;
while ((line = in.readLine()) != null)
System.out.println(line);

}
catch (IOException e) {
e.printStackTrace();
}
finally{}
}

Desde ya muchas gracias y espero que alguien pueda ayudarme!
Saludos
  #2 (permalink)  
Antiguo 09/12/2008, 13:49
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Hola. Puede que si funcione pero no lo ves en consola. Prueba a redireccionar la salida de tu comando a un fichero.

ls -l|grep `date '+%m/%d/&y' > /usuario/prueba.txt

salu2
  #3 (permalink)  
Antiguo 10/12/2008, 05:16
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Hola dogduck, gracias por responder.

A propósito he tratado de redireccionar el resultado pero no hay caso. No se que sucede pero no se ejecuta. Es más, cuando ejectuto la instruccion:
Process p = obj.exec("ls -l"); => FUNCIONA
y al ejectuar esta otra:
Process p = obj.exec("ls -l|grep `date '+%m/%d/&y'`"); => YA NO FUNCIONA (y lo mismo sucede si trato de redireccionar esta ultima instruccion. Ni siquiera se genera el archivo)
Process p = obj.exec("ls -l|grep `date '+%m/%d/&y'` > /$HOME/prueba.txt"); => NO FUNCIONA

A mi se me ocurre que puede estar pasando esto porque en la segunda instruccion, en realidad se está ejecutando dos procesos un como entrada del otro, es decir la entrada del "grep" es la salida del "ls -l" y quizas es por esto que no funciona.. La verdad ya no se qué pensar!! Gracias

Última edición por matiasweb; 10/12/2008 a las 05:22
  #4 (permalink)  
Antiguo 10/12/2008, 05:18
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

¿Has pensado en sacar la instrucción compleja a un script externo (buscarfecha.sh) y llamar a eso?
  #5 (permalink)  
Antiguo 10/12/2008, 05:38
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Venkman, si lo he hecho y nada.
He generado un script, o mejor dicho, un archivo ejecutable y nada..
Aparentemente se produce la llamada pero no hace nada.

Para hacerlo de manera mas simple, solo he puesto en el archivo, la instruccion "date" y nada mas (suponete que al archivo lo llamo ejec.ej).
Cuando ejecuto este archivo desde la consola, funciona. Me muestra la fecha. Pero al invocarlo desde el programa Java, no hace nada..

Sigo intentando..
  #6 (permalink)  
Antiguo 10/12/2008, 05:52
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

A ver, porque no sé si es que quizá el problema está en otro lado. Cuando dices "se produce la llamada pero no hace nada" ¿qué quieres decir? ¿Cómo sabes que se produce la llamada si no hace nada? ¿Qué quiere decir que "no hace nada"?
  #7 (permalink)  
Antiguo 10/12/2008, 06:18
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Con "no hace nada" me refiero a que cuando ejecuto el programa java (lo ejecuto desde la consola), lo unico que hace generar otro renglon de prompt y nada mas. No da señal de que algo salio mal ni nada..
Sí me da error cuando por ejemplo, la ruta de mi archivo ejecutable no es correcta, ahi me envia un mensaje de error de java, diciendo que el archivo no fue encontrado.. Entonces, cuando veo que no hace nada, es decir solo me muestra un nuevo prompt, supongo que la llamada a mi archivo se ejecuta correctamente.. no? Igualmente, si en lugar de hacer la llamada a mi programa, coloco explicitamente el comando que quiero ejecutar (ls -l|grep `date '+%m/%d/&y'`), sucede exactamente lo mismo, solo lo que hace es colocar otro prompt y nada mas.. (como cuando uno compila exitosamente un archivo java, lo que hace es "nada", solo va al prompt siguiente) No se si me explico bien..

Esto sucede:
/Matias>java fechas
/Matias>

Asi es como reacciona..
  #8 (permalink)  
Antiguo 10/12/2008, 06:53
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Vamos por partes...

1. Ejecutar un script externo.
Runtime.exec() te va a permitir ejecutar 1 comando externo. No te permite ejecutar un pipe de varios comandos. Así que si lo que vas a tener que ejecutar es eso, tendrás que hacer un script externo. O alternativamente puedes ejecutar un shell como comando externo y escribir en ese shell. Ejemplo aquí.

2. Ejecutar con argumentos.
exec no te deja ejecutar un comando así como quieras. Quiero decir, no pones ahí una cadena con lo que sea y lo ejecutas. Si el comando que quieres ejecutar usa varios argumentos o argumentos con espacios, entonces en lugar de pasarle una cadena, tendrás que pasarle un Array de cadenas con el comando y los parámetros. Ejemplo aquí.

3. Que no veas que se ejecute no quiere decir que no se ejecute. Sólo quiere decir que tú no lo ves.
El comando se ejecuta en su propio entorno, lo que quiere decir que no necesariamente tiene acceso a tu stdin y stdout. Si lo que quieres es leer la salida de lo que ejecutes, entonces tendrás que leerlo explícitamente. Ejemplo aquí.

Espero que te sea de ayuda. Combina lo que se ve en los 3 ejemplos según necesites.
  #9 (permalink)  
Antiguo 10/12/2008, 08:23
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

venkman, agradezco mucho tu ayuda.. Voy a probar sobre estas opciones que me pasaste y te aviso!

gracias de nuevo.
  #10 (permalink)  
Antiguo 11/12/2008, 12:21
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

venkman, estuve probando las opciones y no resultan..

Con respecto a eso que decis de los resultados (que no los vea porque puede ser que se ejecuten en otro entorno), hice la prueba de colocar en mi archivo externo, solomente la leyenda "echo HOLA ESTA ES UNA PRUEBA > /$HOME/prueba.txt".

Esto independientemente del entorno en que se ejecute, deberia generar el archivo prueba.txt, pero no lo hace..

es una lucha estoo! =)
  #11 (permalink)  
Antiguo 11/12/2008, 14:14
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Para lanzar un ejecutable desde windows con java, yo utilicé:

public class test {
public static void main(String[] args){
Runtime aplicacion = Runtime.getRuntime();
try{aplicacion.exec("C:/Windows/System32/NOTEPAD.EXE"); }
catch(Exception e){}

}
}

Prueba a ver si en lugar del notepad ( que es de windows), puedes lanzar comandos de la shell de unix... lo que no se es si debes de invocar a la shell como en windows ( cmd /C dir *.*).

Salu2

postdata: date una vuelta por el foro de java ...
  #12 (permalink)  
Antiguo 11/12/2008, 16:55
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Una pregunta... ¿Le estás poniendo la ruta completa absoluta o relativa hasta el ejecutable o sólo el nombre del ejecutable? Si está en el mismo directorio, ¿has probado con "./ejecutable"?
  #13 (permalink)  
Antiguo 12/12/2008, 05:08
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

He probado poniendo la ruta absoluta y relativa.. Tambien me he equivocado poniendo mal la ruta, y en ese caso el programa lanzaba un error diciendo que el archivo no fué encontrado.. Asi que estoy seguro que lo estoy llamando bien..
No se que me puede estar faltando hacer..
  #14 (permalink)  
Antiguo 12/12/2008, 05:21
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

No sé, si quieres pon aquí el código completo para que lo veamos.
  #15 (permalink)  
Antiguo 12/12/2008, 05:37
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Con mucho gusto:
=========================

import java.io.*;
import java.lang.String;
import java.lang.Process;
import java.lang.*;


public class p {

public static void main(String[] args)
{

try {
String[] commands = new String[]{"/$HOME/JavaMatias/ej.sh"};

Process p = Runtime.getRuntime().exec(commands);

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = null;
while ((line = in.readLine()) != null)
System.out.println(line);


} catch (IOException e) {}

}

}

=======================
y el codigo de ej.sh es:

echo HOLA PRUEBA > prueba.txt


===========================
Sé que en lugar de utilizar una variable de tipo String[]. podría haber utlizado un String, pero me quedo así de las pruebas que venía haciendo ultimamente..

Como veras tambien, estoy haciendo todo extremadamente simple porque quiero que primero funcione la llamada a mi archivo. Una vez que logre eso, seguiré adelante poniendo lo que realmente necesito que es lo de la fecha (ls -l|grep `date '+%m/%d/%y'`).
  #16 (permalink)  
Antiguo 12/12/2008, 08:24
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Lo he probado en Windows y me va. Después de comer lo pruebo en Linux y te digo algo.
  #17 (permalink)  
Antiguo 12/12/2008, 10:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Sabes.. en windows no probé esto con un archivo externo mío.. si probé lo de llamar al notepad o al paint y me funcionó. Voy a probar en windows a ver si funciona.



Cita:
Iniciado por dogduck Ver Mensaje
Para lanzar un ejecutable desde windows con java,
yo utilicé:

public class test {
public static void main(String[] args){
Runtime aplicacion = Runtime.getRuntime();
try{aplicacion.exec("C:/Windows/System32/NOTEPAD.EXE"); }
catch(Exception e){}

}
}

Prueba a ver si en lugar del notepad ( que es de windows), puedes lanzar comandos de la shell de unix... lo que no se es si debes de invocar a la shell como en windows ( cmd /C dir *.*).

Salu2

postdata: date una vuelta por el foro de java ...
  #18 (permalink)  
Antiguo 12/12/2008, 11:21
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

dogduck, recien probé en windows me funciona bien.. el problema lo tengo en unix =((


Cita:
Iniciado por matiasweb Ver Mensaje
Sabes.. en windows no probé esto con un archivo externo mío.. si probé lo de llamar al notepad o al paint y me funcionó. Voy a probar en windows a ver si funciona.
  #19 (permalink)  
Antiguo 12/12/2008, 18:24
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

Lo he probado en Solaris y tampoco he tenido problema. Has revisado permisos del ej.sh? Es que no se me ocurren muchas más ideas, la verdad.
  #20 (permalink)  
Antiguo 13/12/2008, 17:01
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

CHAN!!! en serio??? mm, me voy a fijar eso.. pero me pareció que tenía.. Te mantengo al tanto. Gracias Venkman.
  #21 (permalink)  
Antiguo 15/12/2008, 05:17
 
Fecha de Ingreso: diciembre-2008
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ejecutar programa externo desde Java (UNIX)- problema

No hay caso, no lo ejecuta
Tendré que hacer otra cosa..
Gracias igual por la ayuda, fue muy valiosa!! gracias
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:36.