Auteur: Yves Martin Date: À: guilde Sujet: Re: java et problèmes de droits
Selon stephane parenton <stephane@???>:
> la classe lance
> Runtime.getRuntime().exec(nomBatch);
>
> lorsque nombatch est remplacé par ./runtop un petit shell qui ne
> contient que top > ./top.return
> top.return est bien ecrit dans le repertoire courant.
>
> quand nombatch est remplacé par top > ./top.return, là, le fichier
> top.return ne s'ecrit plus....
C'est normal '>' ne fonctionne que parce qu'il est interprété par le shell.
Runtime.exec ne permet que de lancer des commandes avec des arguments, et
ne supporte par les redirections.
> j'ai essayé de mettre le repertoire en 777 (arf arf... on peut rire un
> peu !).... mais ça ne fait rien de plus.... j'aimerai comprendre la
> différence en un batch lancé vi java et la commande lancé via java au
> niveau des droits.... pourquoi je peux pas faire la commande en direct
> !!!??? ;-)
Comme expliqué, ce n'est pas un problème de droit mais d'interprétation de
la ligne de commande dans Runtime.exec
Deux solutions: un shell script qui prend le nom d'un fichier en
argument:
./topoutput file.out
contenu 'top > $1'
Une autre solution [ que j'ai finallement testé dans bsh pour être sûr,
tu en as de la chance ;) ]
exec( new String[] { "bash", "-c", "top -b -n 1 > top.return" } )
Ou pour progresser en Java, tu fais un Runtime.exec("top") et tu manipules
le Process.getOutputStream pour obtenir le contenu du retour de la commande
(avec un waitFor et une lecture de l'exitValue)
Java est fait pour être portable - donc les aspects sympatiques d'un shell
Unix n'ont pas été pris en compte - mais uniquement les appels systèmes
possibles. Voir les différents 'exec' de java.lang.Runtime