117 votes

Comment puis-je exécuter un fichier de commandes à partir de mon Application Java?

Dans mon application Java je veux exécuter un fichier de commandes qui appelle "scons -Q implicit-deps-changed build\file_load_type export\file_load_type"

Il semble que je ne peux même pas obtenir mon fichier de commandes à exécuter. Je suis à court d'idées.

C'est ce que j'ai en Java:

Runtime.getRuntime().exec("build.bat", null, new File("."));

Auparavant j'ai eu un python Sconscript fichier que je voulais courir mais depuis cela ne fonctionne pas j'ai décidé d'appeler le script via un fichier batch, mais cette méthode n'a pas été couronnée de succès encore.

191voto

Paulo Guedes Points 4241
Runtime.getRuntime().exec("cmd /c start build.bat");

22voto

Parfois, le fil d'exécution temps d'exécution est supérieur à la JVM thread en attente de la durée des processus, il utilise t-il quand le processus, vous êtes en invoquant prend un certain temps à être traitées, utilisez le waitFor() la commande comme suit:

try{    
    Process p = Runtime.getRuntime().exec("file location here, don't forget using / instead of \\ to make it interoperable");
    p.waitFor();

}catch( IOException ex ){
    //Validate the case the file can't be accesed (not enought permissions)

}catch( InterruptedException ex ){
    //Validate the case the process is being stopped by some external situation     

}

De cette façon, la machine va s'arrêter jusqu'à ce que le processus, vous êtes en invoquant est fait avant de continuer avec le fil pile d'exécution.

20voto

Isha Points 91
Runtime runtime = Runtime.getRuntime();
try {
    Process p1 = runtime.exec("cmd /c start D:\\temp\\a.bat");
    InputStream is = p1.getInputStream();
    int i = 0;
    while( (i = is.read() ) != -1) {
        System.out.print((char)i);
    }
} catch(IOException ioException) {
    System.out.println(ioException.getMessage() );
}

14voto

basszero Points 14539

ProcessBuilder est la Java 5/6 façon d'exécuter les processus externes.

11voto

Eli Courtwright Points 53071

L'exécutable utilisé pour exécuter des scripts batch est - cmd.exe qui utilise l' /c drapeau pour spécifier le nom du fichier de commandes à exécuter:

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "build.bat"});

Théoriquement, vous devez également être en mesure d'exécuter Scons de cette manière, si je n'ai pas testé ce:

Runtime.getRuntime().exec(new String[]{"scons", "-Q", "implicit-deps-changed", "build\file_load_type", "export\file_load_type"});

EDIT: Amara, vous dire que ce n'est pas de travail. L'erreur que vous avez indiquée est l'erreur que vous obtenez lors de l'exécution de Java à partir d'un terminal Cygwin sur une zone de Windows; est-ce que vous êtes en train de faire? Le problème c'est que Windows et Cygwin ont des parcours différents, de sorte que la version Windows de Java ne trouverez pas de l'scons exécutable sur votre Cygwin chemin. Je peux expliquer davantage, si cela s'avère être votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X