Runtime.getRuntime().exec(command) ne donne pas de résultat

nasix
Runtime.getRuntime().exec(command) ne donne pas de résultat

Bonjour,

Dans un simple programme, je fais appelle à un script externe (.exe) via :

Runtime.getRuntime().exec(monscript);

Mais ceci a l'aire de ne pas bien fonctionner. J'ai déjà manipulé Runtime.getRuntime().exec, elle marche bien et ça a donné un résultat, mais dans mon cas actuel ça ne me donne rien, je le dis parce que je redirige la sortie du script vers un fichier, et ce fichier je ne le trouve pas après l'exécution.

Voici une parie de mon code :

String outputType 	= "outputfile";
String command 		= script+ " " + outputType + " > \"" + outputFile+"\"";
System.out.println(command);
Runtime.getRuntime().exec(command);

La commande que j'exécute est correcte, car je l'affiche comme vous le remarquez, quand je l'exécute sous dos, elle marche très bien mais via mon programme, non plus.

Je bosse sous Windows XP.

Merci de bien vouloir me faire profiter de vos expérience là dessus.
Bonne journée.

fredericmazue
Re: Runtime.getRuntime().exec(command) ne donne pas de résultat

Bonjour Nasix,

Ton problème est un classique des classiques. La question a été posée plein de fois sur ce forum, si tu cherches tu vas en retrouver.

Par exemple ici

Le fond du problème est que les tampons d'entrées/sorties du système saturent. Pour éviter ça, il te faut lire le OuputStream dans un thread séparé, pour vider le tampon

nasix
Re: Runtime.getRuntime().exec(command) ne donne pas de résultat

Salut,

Merci pour votre réponse, je ne comprends toujours pas le problème et je n'arrive pas à le résoudre.

Bonne fin de journée.

fredericmazue
Re: Runtime.getRuntime().exec(command) ne donne pas de résultat

Bonjour,

Voici un exemple de code qui lance un exécutable quelconque. Ca devrait te donner le moyen de résoudre ton problème

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);
    }
}
nasix
Re: Runtime.getRuntime().exec(command) ne donne pas de résultat

Bonjour frederic,

Merci beaucoup, ça marche à merveille.

Bonne journée.