2017-07-20 3 views
0

Ich benutze exec-Bibliothek, um R-Skript von Knoten js Express aufrufen. Unten ist mein Code:wie mehrere params in exec in node js übergeben

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); 
     } 
    }); 

In dem obigen Code, wenn ich nur param2 und param3 r Skript übergeben in der Lage, sie zu identifizieren. Aber wenn ich url überlasse, wird nur ein Teil der URL als URL identifiziert und der Rest ist nicht (kann sein lang sein). Bitte vorschlagen. Dank

+0

Sie brauchen mehr Kontext. Wie lautet die URL? Ist die URL [codiert] (https://www.w3schools.com/tags/ref_urlencode.asp)? Was ist mit den relevanten Abschnitten Ihres R-Skripts? Es besteht die Möglichkeit, dass Ihr Befehl fehlerhaft ist. Haben Sie versucht, Ihr Befehlsargument mit der Methode 'exec' zu" console.log "zu übersetzen? Funktioniert es von der Befehlszeile genau so, wie es gedruckt wurde? –

Antwort

0

Dies ist keine exakte Antwort, aber ich hoffe, es hilft, das Problem zu debuggen;

Was ich versucht hier zu tun ist, doppelte Anführungszeichen param1, und trennen Sie den Befehl aus dem exec zu lesen es ein wenig leichter zu machen.

Viel Glück.

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); 
     } 
    });