From: Vincent Bouscasse <Vincent.Bouscasse@scinfo.u-nancy.fr>
Subject: getRuntime().exec()
To: java@u-strasbg.fr
Date sent: Mon, 24 Jan 2000 13:56:16 +0100 (MET)
Send reply to: java@u-strasbg.fr
salut a tous....voila j'ai une petite question a propos des methodes
exec() de la classe Process...Je bosses sous unix en reseau et j'aimerais
interagir avec l'interpreteur de commandes depuis une appli java.
j'utilise donc un truc du style:
Process proc = Runtime.getRuntime().exec("commande");
ou Process proc = Runtime.getRuntime().exec(String[]);
ca marche nickel si je fais juste un "ls" ou un "cat fichier"....
par contre si je veux faire un truc comme "mail machin@bidule < fichier"
ou "cp * repertoire" ca marche plus (les symboles speciaux utilises par
l'interpreteur ne sont pas permis (?)).. je voudrais savoir si c'est le
seul moyen pour lancer des commandes et si oui pour quelles raisons
suis-je si limite ?
Merci a vous tous....
Date sent: Mon, 24 Jan 2000 14:34:00 +0100
From: Guillaume Desnoix <guillaume-desnoix@memoire.com>
To: java@u-strasbg.fr
Subject: Re: getRuntime().exec()
Send reply to: java@u-strasbg.fr
Vincent Bouscasse wrote:
> Process proc = Runtime.getRuntime().exec("commande");
> ou Process proc = Runtime.getRuntime().exec(String[]);
> ca marche nickel si je fais juste un "ls" ou un "cat fichier"....
> par contre si je veux faire un truc comme "mail machin@bidule < fichier"
> ou "cp * repertoire" ca marche plus (les symboles speciaux utilises par
> l'interpreteur ne sont pas permis (?)).. je voudrais savoir si c'est le
> seul moyen pour lancer des commandes et si oui pour quelles
>raisons suis-je si limite ?
Runtime.getRuntime().exec() correspond a l'appel systeme exec() de l'OS,
qui lance un executable avec arguments. les redirections (<,> et |), les
caracteres generiques (*,?), ... sont des fonctionnalites du shell, pas de
l'OS. Il n'est pas evident de les utiliser dans un prog Java. En gros, il
faut lancer un shell (par exec()) puis passer les commandes...
Guillaume
Date sent: Mon, 24 Jan 2000 14:44:32 +0100
From: Guillaume Desnoix <guillaume-desnoix@memoire.com>
To: java@u-strasbg.fr
Subject: Re: getRuntime().exec()
Send reply to: java@u-strasbg.fr
En complement, un petit exemple (incomplet ;-)
Utilisation: java TestExec ls "*.java"
Guillaume.
------------------------
import java.io.*;
class TestExec
{
public static void main(String[] args)
{
int i;
String cmd;
cmd="";
for(i=0;i<args.length;i++) cmd+=args[i]+" ";
System.out.println(cmd);
cmd+="\n";
try
{
Process p=Runtime.getRuntime().exec("/bin/sh");
OutputStream in=p.getOutputStream();
in.write(cmd.getBytes());
in.flush();
InputStream out=new BufferedInputStream(p.getInputStream());
byte[] b=new byte[1024];
int n=out.read(b);
for(i=0;i<n;i++) System.out.print((char)b[i]);
}
catch(Exception ex) { }
}
}
From: Vincent Bouscasse <Vincent.Bouscasse@scinfo.u-nancy.fr>
Subject: Re: getRuntime().exec()
To: java@u-strasbg.fr
Date sent: Mon, 24 Jan 2000 17:04:43 +0100 (MET)
Send reply to: java@u-strasbg.fr
Merci beaucoup guillaume....cela repond dorenavant mieux a mes besoins...
Sympa cette liste quand meme... ;o)
>
> En complement, un petit exemple (incomplet ;-)
> Utilisation: java TestExec ls "*.java"
>
> Guillaume.
>
> ------------------------
> try
> {
> Process p=Runtime.getRuntime().exec("/bin/sh");
> OutputStream in=p.getOutputStream();
> in.write(cmd.getBytes());
> in.flush();
> InputStream out=new BufferedInputStream(p.getInputStream());
> byte[] b=new byte[1024];
> int n=out.read(b);
> for(i=0;i<n;i++) System.out.print((char)b[i]);
>
> }
> catch(Exception ex) { }
> }
> }