Ajouter un commentaire

fredericmazue

Quote:
Le soucis c'est que visiblement la JVM n'est pas capable d'aller
chercher les variables d'envrionnement system ce qui fait que
lorsque tu fais

C'est une plaisanterie ?
Quand tu lances une commandes avec Runtime.exec, si la commande est dans le PATH elle est lancée *par le système* car c'est ce que demande de faire Runtime.exec. La JVM n'a même pas besoin d'être au courant du PATH.
Ceci dit la JVM lit parfaitement le PATH. Par exemple lorsqu'elle doit charger une librairie native, elle ne peut le faire que lorsque la dite librairie est dans le PATH justement.
Quote:
runtime.exec("dir"); il pète une erreur.

Il va même en pêter deux.
D'abord la première, parce que sous Windows dir ne peut pas être lancé, PATH ou pas. Le code correct est:
runtime.exec("cmd.exe /c dir");

Ensuite la deuxième erreur. Ce lancement à l'emporte pièce est incorrect. Dès que le commande lancée émet un ou deux octets il y a un BufferOverflow des E/S. Pour que ça puisse marcher correctement en toute situation, il est impératif de procéder les E/S dans un thread. Au minimum, l'entrée, qui capte la sortie de la commande lancée Voici un code correct, extrait d'un article paru dans Programmez! 82

package programmez.fred.processesdemo;

import java.util.*;
import java.io.*;

class StdHandler extends Thread {
    InputStream is;
    String type;
    
    StdHandler(InputStream is, String type) {
        this.is = is;
        this.type = type;
    }
    
    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String ligne=null;
            while ( (ligne = br.readLine()) != null)
                System.out.println(type + "> " + ligne);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

public class Demo4 {
    public static void main(String[] args) throws Throwable {
        if (args.length <= 0) {
            System.err.println("Donnez une commande a lancer");
            System.exit(-1);
        }
        System.out.printf("\nSortie de la commande %s: \n",
                Arrays.toString(args));
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(args);
        
        StdHandler stderr = new
                StdHandler(process.getErrorStream(), "stderr");
        
        StdHandler stdout = new
                StdHandler(process.getInputStream(), "stdout");
        
        stderr.start();
        stdout.start();
        int status = process.waitFor();
        System.out.println("Valeur de retour du sous proc: " + status);
    }
}

Tu peux essayer de code en lui donnant cmd.exe /c dir comme argument.

PS: Le code marche aussi sous Linux, mais dans ce cas tu lui donnes pas cmd.exe /c dir hein ? :lol:

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 U   U   CCC   SSS       J  K  K 
U U C S J K K
U U C SSS J KK
U U C S J J K K
UUU CCC SSSS JJJ K K