Bonjour,
J'aimerais savoir s'il était possible d’exécuter un bout de code en C depuis notre application node js?
Si oui comment où peut faire?
Merci d'avance pour vos réponse.
Bonjour,
J'aimerais savoir s'il était possible d’exécuter un bout de code en C depuis notre application node js?
Si oui comment où peut faire?
Merci d'avance pour vos réponse.
Il faut passer par nodejs et commande line il me semble.
http://shapeshed.com/command-line-ut...s-with-nodejs/
J'ai regarder ce que tu ma dit et j'avoue ne pas bien comprendre comment sa fonctionne et ou rentre mon programme en C...
Utilise child_process https://nodejs.org/api/child_process.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var cp = require('child_process'); cp.exec('ls -la', function(err, stdout, stderr) { // par exemple un ls, mais tu y met lexécutable que tu veux if (err) throw err; if (stderr) console.warn(stderr); console.log(stdout); });
nodeJS supporte l'ajout de module écrits en C++
fichier hello.cc
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // hello.cc #include <node.h> using namespace v8; void Method(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world")); } void init(Handle<Object> exports) { NODE_SET_METHOD(exports, "hello", Method); } NODE_MODULE(addon, init)
le descripteur pour indiquer au compilateur comment ler le module C++ à nodeJS
binding.gyp
node-gyp configure pour générer le makefile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 { "targets": [ { "target_name": "addon", "sources": [ "hello.cc" ] } ] }
et tu peux l'utiliser ainsi
tu trouveras la doc sur le site de nodeJS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // hello.js var addon = require('./build/Release/addon'); console.log(addon.hello()); // 'world
A+JYT
Merci pour vos réponses, xulien je connais child processus mais j'aurais voulu quelque chose de plus intégrée si possible.
Sekaijin ta solution me parait pas mal mais je connais pas le C++ , il n'y a pas moyen de faire la même chose mais en C?
Enfaite-je n'ai pas moyen de lancer un exécutable en lui mettant des paramètres en entrée? Pour ne pas à avoir à compiler à chaque fois mon programme pour que ça soit plus rapide?
Je sais pas si je suis très claire...
nodeJS s'appuis sur le moteur V8
et V8 est écrit en C++
tu trouveras la doc ici
http://izs.me/v8-docs/hierarchy.html
https://developers.google.com/v8/
https://nodejs.org/api/addons.html
le problème c'est js est un langage à objet et V8 est lui écrit avec un langage à objet
difficile de faire une API avec un langage qui ne supporte pas la notion d'objet.
A+JYT
D'accord merci pour ta réponse j'hésite entre utiliser ta solution ou celle du child.process.Exec File(file[, args][, options][, callback]) qui me permettrai d’exécuter un .exe de mon programme en C avec des paramètres d'entrée si c'est bien compris. Tu me conseillerais quelle solution?
tout dépends de tes capacité à faire du C++
si tu te sent de te lancer c'est plus propre et plus efficace
tu peux ajouter les fonction et objet de ton choix à ton moteur js
mais si tu ne maîtrise pas un peu exec est plus abordable moins interactions entre le c et js mais plus simple
A+JYT
D'accord bah je pense que je vais commencer par exec et je verrai plus tard pour faire par ta méthode vue que je vais avoir des cours de C++ l'année prochaine.
Juste une dernière question avec exec je peux bien envoyer des paramètres à mon programme grâce à child.process.Exec.File(file[, args][, options][, callback])? Et est-il possible d'avoir un retour de mon programme quand l'exécutable a fini, pour récupérer une ou deux valeurs?
Non
du moins pas en retour de l'exécution
nodeJS fonctionne par callback
tu exécute child.process.Exec.File(....) et ça ne te retourne rien
par contre tu peux passer en paramètre un callback
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 child.process.Exec.File(.... function(error, stdout , stderr) { // ici error contient le code retour de l'exécution // stdout contient ce que l'exécution à produi tvers stdout // stderr contient ce que l'exécution à produi tvers stderr });A+JYT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 child.process.exec("echo", "hello world", function(error, stdout , stderr) { // ici error : 0 // stdout : hello world // stderr : });
D'accord merci, j'en ai pas vraiment besoin du retour donc ce n'est pas si grave.
Donc si j'ai bien compris je lance mon exécutable C avec:
Mais dans mon Code en C comment je fais pour récupérer mon paramètre1 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 child.process.exec('NomDeMonExe.exe', "Paramètre1", function(error, stdout , stderr) { //Cette fonction est exécuter a la fin de mon exe });
Comme ça?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Void main(char Parametre1) { //Mon code... }
Je n'ai pas encore essayé mais je pense que c'est comme ça, je connaissais pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <stdio.h> #include <stdlib.h> int main ( int argc, char* argv[] ) { return 0; }
Petit question le stderr correspond a quoi dans la fonction de retour?
Merci
error > gestionnaire de nodele stderr correspond a quoi dans la fonction de retour?
sdtout > retour de la sortie de ton exe
sdterr > retour erreur de ton exe
Ah ouais d'accord merci^^
donc si je met unJe peut le récupérer avec sdtout ou rien avoir?
Code : Sélectionner tout - Visualiser dans une fenêtre à part return Variable;
non
pas de return dans un exe en C
le main peut faire
exit 0
exit 1
etc.
c'est le code retour de l'exe
pour écrire sur stdout il faut utiliser les fonctions stdio comme printf
de même tu peux écrire sur stderr
l'équivalent du echo en shell
A+JYT
D'accord merci pour vos réponses. Je vais commencer à programmer pour voir.
J'ai essayé j'ai compris pour le stdout que c'est ce qui est afficher sur la console normalement avec les printf, mais pour le stderr je comprend pas comment écrire dedans...?
Code c : Sélectionner tout - Visualiser dans une fenêtre à part fprintf(stderr, "Hello World ");
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager