Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ejecutar "cmd.exe" desde java

Buen día gente. ¿Cómo están?

Recurro a ustedes para hacer una pequeña consulta.
Estoy intentando ejecutar el interprete de comandos de manera remota, tal como si ejecutara el cmd.exe desde netcat.

Ejecuto la terminal de la siguiente manera:

Process pepote = Runtime.getRuntime().exec(cmd);

Y desde la lectura del buffer obtengo:

"Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
Microsoft Windows [Versi�n 6.1.7601]"

Y aquí está mi duda...

Al no estar dentro de un thread, la aplicación se "cuelga", ya que cmd se sigue ejecutando esperando el ingreso de comandos.

Llegado a este punto mi pregunta es: ¿Cómo puedo hacer para ejecutar comandos dentro de la shell ya abierta?

Gracias y saludos!

diciembre 27, 2014 | Unregistered CommenterPenicles

Si no recuerdo mal, cmd.exe tiene un parámetro /C que permite indicar una orden que se quiere ejecutar. Estoy en Linux y no puedo confirmarlo, pero ejecuta tú "cmd.exe /?" para ver los parámetros disponibles y seguro que uno de ellos permite pasar una orden para que se ejecute.

De esa manera, cmd ejecutaría la orden y finalizaría. No sería, por tanto, un entorno interactivo, pero la interactividad la podrías simular tú en tu interfaz pidiendo la orden al usuario, pasándola como parámetro a CMD y devolviendo el resultado al usuario y volviendo a pedirle la siguiente orden.

En muchos casos podrías incluso prescindir de CMD (p.e.: para ejecutar Word no necesitas hacer "CMD /C winword.exe", sino que bastaría "winword.exe" con la ruta completa al ejecutable). Sin embargo, al pasar por CMD permites que también se puedan invocar las órdenes internas de CMD, como dir.

diciembre 28, 2014 | Registered Commenterrickiees

mmm... no era exactamente lo que buscaba, pero aparentemente voy a tener que hacerlo de esta forma :r

En fin... Muchisimas gracias por tu respuesta.
¡Feliz año nuevo!

diciembre 29, 2014 | Unregistered CommenterPenicles

Guenas.

La primera pregunta y para mi la mas importante es ¿Porque no la ejecutas dentro de un Thread?

Estas diciendo: Tengo que hacer una carrera de 100m lisos y no consigo nada porque llevo los cordones atados de un zapato a otro. ¿Que puedo hacer para ganar la carrera?
Perdona pero tu mismo has visto el problema y sabes la solución. ¿Que te impide utilizarla? De verdad que no se me ocurre nada que te fuerce.

Si no sabes usar Threads esa es otra pregunta que probablemente muchos podrán responderte, pero eso no es una barrera a lo que tu puedes hacer.

Si deseas ganar una carrera con los pies atados no escribas aquí. Hazlo en www.PidoUnMilagro.com o al menos explica poque no puedes usar hilos.

Un saludo

diciembre 30, 2014 | Unregistered CommenterPaposo

jaja te entiendo, te entiendo... pero no era esa mi consulta.
No lo puse dentro de un thread porque hasta el momento es irrelevante para dar con la solución a mi problema.

Mi consulta iba a:

Abro la terminal desde mi aplicacion java y ésta se queda "colgada" (ya que no está dentro de un Thread) ejecutando la aplicación cmd.exe (podría ser el bash también de estar en linux o una aplicación X).

Hasta acá todo de maravilla... el problema no es que mi aplicación java se quede "colgada" entre comillas. El problema es que no se como pasarle comandos a la aplicación ya abierta.

Si no me explico bien pido disculpas y trataré de ser más explicativo.
Saludos.

diciembre 30, 2014 | Unregistered CommenterPenicles

Guenas.

Si tu aplicación externa admite parámetros desde IN no hay ningún problema en pasárselos desde java.
Java permite enviar a los dispositivos estándar IN (entrada estándar) cualquier texto.
Si la entrada es vía lectura directa del teclado o una ventana dudo que puedas hacerlo sin ninguna librería externa que enlace el SO con java.
Si trabajas desde unix (linux o simiilares) usa el IN-OUT estándar. Para eso el proceso obtenido desde Runtime te ofrece acceso a esos canales.
Usa desde la aplicación abierta lectura del in estándar y podrás enviarle lo que quieras. Si la aplicación externa no es modificable te lo veo un pelín crudo.

Quizá algún contertulio sepa de alguna librería capaz de interceptar las llamadas directas al teclado y poner lo que quiera ahí. Yo no la conozco.

Que tengas suerte.

Un saludo,
Paposo

diciembre 31, 2014 | Unregistered CommenterPaposo

Hay algo extraño en todo este asunto: ¿qué sentido tiene abrir una consola de sistema y pasarle comandos desde Java?.
No sé qué tienes en mente para plantear semejante cuestión; pero no he visto nunca nada parecido, ni desde Java ni desde otro lenguaje.
Los comandos se pueden pasar en la invocación del exec del runtime; pero ¿pasarlos una vez abierta?

diciembre 31, 2014 | Registered Commenterchoces

Choces tiene razon.

Es raro. Un comando externo suele usarse para hacer una tarea concreta definida al inicio.

Un saludo
Paposo

diciembre 31, 2014 | Unregistered CommenterPaposo