2017-07-20 2 views
0

J'utilise exec library pour appeler R-script depuis le noeud js express. Ci-dessous mon code:comment passer plusieurs params dans exec dans le noeud js

var exec = require("child_process").exec; 

var param1 = some url; 
var param2 = "hello"; 
var param3 = "world" 
exec('Rscript pathtoscript/myScript.R"+" "+param1+" "+param2 , function(error, stdout, stderr) { 
     if (error) { 
      console.log(error); 
      res.send(error); 
     } 
     else if (stderr) { 
      console.log(stderr); 
      res.send(stderr); 
     } 
     else if (stdout) { 
      console.log("RAN SUCCESSFULLY"); 
      res.json(stdout); 
     } 
    }); 

Dans le code ci-dessus, si je passe seulement param2 et param3 le script r est capable de l'identifier. Mais quand je passe url, seulement une partie de l'url est identifiée comme URL et le repos n'est pas (peut-être son long). Veuillez suggérer. Merci

+0

Vous devez fournir plus de contexte. Quelle est l'URL? Est-ce que l'URL [codée] (https://www.w3schools.com/tags/ref_urlencode.asp)? Qu'en est-il des sections pertinentes de votre script R? Les chances sont que votre commande est mal formée. Avez-vous essayé de 'console.log' votre argument de commande à la méthode' exec'? Cela fonctionne-t-il à partir de la ligne de commande exactement comme il l'a imprimé? –

Répondre

0

Ce n'est pas une réponse exacte, mais j'espère que cela aide à résoudre le problème; Ce que j'ai essayé de faire ici est de faire une double citation de param1, et de séparer la commande de l'exec pour la rendre un peu plus facile à lire.

Bonne chance.

var exec = require("child_process").exec; 

var param1 = "\"http:\\something\""; 
var param2 = "hello"; 
var param3 = "world" 
var command = "Rscript pathtoscript/myScript.R "+ param1 + " " + param2 + " " + param3; 

exec(command, function(error, stdout, stderr) { 
     if (error) { 
      console.log(error); 
      res.send(error); 
     } 
     else if (stderr) { 
      console.log(stderr); 
      res.send(stderr); 
     } 
     else if (stdout) { 
      console.log("RAN SUCCESSFULLY"); 
      res.json(stdout); 
     } 
    });