comment exécuter une commande à la borne de programme java?
J'ai besoin d'exécuter une commande à la borne dans Fedora 16, à partir d'un programme JAVA. J'ai essayé d'utiliser
Runtime.getRuntime().exec("xterm");
mais cela ouvre le terminal, je ne suis pas en mesure d'exécuter n'importe quelle commande.
J'ai aussi essayé ceci:
OutputStream out = null;
Process proc = new ProcessBuilder("xterm").start();
out = proc.getOutputStream();
out.write("any command".getBytes());
out.flush();
mais encore je ne peux ouvrir le terminal, mais ne peut pas exécuter la commande.
Toutes les idées sur la façon de le faire?
- Avez-vous essayé
Runtime.getRuntime().exec(<insert command name here>);
Vous n'avez pas besoin d'ouvrirxterm
c'est ce qui est de l'ouverture de votre terminal. - Vous devriez essayer
sh -s
, et vous pouvez utiliser le code que vous avez écrit, le shell s'engage à accepter les commandes à partir du flux, oush -c <the command you want to run>
, et la commande spécifiée dans l'argument sera exécuté.
Vous devez vous connecter pour publier un commentaire.
Vous devez l'exécuter à l'aide de
bash
exécutable comme ceci:Mise à jour:
Comme suggéré par xav, il est conseillé d'utiliser ProcessBuilder à la place:
Runtime.exec()
est maintenant déconseillé: l'utilisation doit utiliser ProcessBuilder à la place (docs.oracle.com/javase/7/docs/api/java/lang/...)Je vote pour Karthik T réponse. vous n'avez pas besoin d'ouvrir un terminal pour exécuter des commandes.
Par exemple,
La sortie:
Vous n'avez pas besoin d'exécuter une commande à partir d'une session xterm, vous pouvez l'exécuter directement:
Si le processus répond de manière interactive pour le flux d'entrée, et que vous voulez injecter des valeurs, puis faire ce que vous faisiez avant:
N'oubliez pas le '\n' à la fin même si, comme la plupart des apps vous permettra de l'utiliser pour identifier la fin d'un commandement unique de l'entrée.
Comme les autres ont dit, vous pouvez exécuter votre programme externe sans xterm. Cependant, si vous souhaitez exécuter dans une fenêtre de terminal, par exemple pour permettre à l'utilisateur d'interagir avec elle, xterm vous permet de spécifier le programme à exécuter en tant que paramètre.
Dans du code Java cela devient:
Ou, à l'aide de ProcessBuilder:
Runtime.exec()
est maintenant déconseillé: l'utilisation doit utiliser ProcessBuilder à la place (docs.oracle.com/javase/7/docs/api/java/lang/...)Je ne sais pas pourquoi, mais pour une raison quelconque, le "/bin/bash" version ne fonctionne pas pour moi.
Au lieu de cela, la version plus simple travaillait, suivant l'exemple donné ici à Oracle Docs.
Je sais que cette question est assez vieux, mais voici un bibliothèque qui encapsule la ProcessBuilder api.