web-dev-qa-db-fra.com

Comment appeler le script Shell ou python depuis une application électronique Atom

J'essaie d'utiliser l'électron Atom pour écrire une application de bureau pour Mac et Windows.

Ce dont j'ai besoin ici, c'est:

Un bouton.

Et lorsque l'utilisateur clique sur le bouton, il exécute le shell suivant (ou python):

ping x.x.x.x

Et le résultat sera affiché dans un TextArea.

J'ai essayé d'utiliser [shelljs] et [yargs] mais il semble que cela ne fonctionne pas avec Atom electron.

Tout ce que je veux, c'est utiliser JAVASCRIPT pour écrire Desktop App (avec GUI bien sûr) qui appelle un script (Shell && python) pour faire un travail d'automatisation.

Toute suggestion sera appréciée, merci :)

13
supersuraccoon

Cela peut être fait directement avec Node, vous pouvez utiliser le child_process module. Veuillez noter que c'est asynchrone.

const exec = require('child_process').exec;

function execute(command, callback) {
    exec(command, (error, stdout, stderr) => { 
        callback(stdout); 
    });
};

// call the function
execute('ping -c 4 0.0.0.0', (output) => {
    console.log(output);
});

Je vous encourage également à consulter npm , il y a des tonnes de modules qui pourraient vous aider à faire ce que vous voulez, sans appeler un script python.

28
martpie

Essayez node-powershell npm. Vous pouvez exécuter directement les commandes de script Shell et afficher le résultat.

var Shell = require('node-powershell')
var ps = new Shell()
ps.addCommand('ping -c 4 0.0.0.0')
ps.invoke()
.then(function (output) {
    console.log(output)
})
.catch(function (err) {
    console.log(err)
    ps.dispose()
})

Voir: https://www.npmjs.com/package/node-powershell

4
Vishal Shori

vous pouvez utiliser child_process pour archiver ce que vous essayez de faire en utilisant le code suivant

var exec = require('child_process').exec
function Callback(err, stdout, stderr) {
    if (err) {
        console.log(`exec error: ${err}`);
        return;
    }else{
        console.log(`${stdout}`);
    }
}

res = exec('ping xxx.xxx.xxx', Callback);
2