web-dev-qa-db-fra.com

Comment exécuter un fichier .bat à partir de node.js en passant quelques paramètres?

J'utilise node.js v4.4.4 et je dois exécuter un .bat fichier de node.js.

À partir de l'emplacement du fichier js pour mon application de nœud, le .bat est exécutable en utilisant la ligne de commande avec le chemin suivant (plate-forme Windows):

'../src/util/buildscripts/build.bat --profile ../profiles/app.profile.js'

Mais lorsque j'utilise le nœud, je ne peux pas l'exécuter, aucune erreur spécifique n'est levée.

Qu'est-ce que je fais mal ici?


    var ls = spawn('cmd.exe', ['../src/util/buildscripts', 'build.bat', '--profile ../profiles/app.profile.js']);

    ls.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    ls.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    ls.on('exit', function (code) {
        console.log('child process exited with code ' + code);
    });
12
GibboK

Le script suivant a résolu mon problème, en gros je devais:

  • Conversion en référence de chemin absolu en fichier .bat.

  • Passer des arguments à .bat à l'aide d'un tableau.

    var bat = require.resolve('../src/util/buildscripts/build.bat');
    var profile = require.resolve('../profiles/app.profile.js');
    var ls = spawn(bat, ['--profile', profile]);
    
    ls.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });
    
    ls.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });
    
    ls.on('exit', function (code) {
        console.log('child process exited with code ' + code);
    });
    

Ci-dessous une liste d'articles pertinents utiles:

https://nodejs.org/api/child_process.html#child_process_asynchronous_process_creation

https://nodejs.org/api/child_process.html#child_process_spawning_bat_and_cmd_files_on_windows

http://www.informit.com/articles/article.aspx?p=2266928

13
GibboK

Vous devriez pouvoir exécuter une commande comme celle-ci:

var child_process = require('child_process');

child_process.exec('path_to_your_executables', function(error, stdout, stderr) {
    console.log(stdout);
});
15
user5383152