如何在节点js中的exec中传递多个参数

如何在节点js中的exec中传递多个参数

问题描述:

我正在使用exec库从节点js express调用R-script。以下是我的代码:如何在节点js中的exec中传递多个参数

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

在上面的代码中,如果我只传递param2和param3,则r脚本能够识别它。但是当我传递url时,只有url的一部分被识别为URL,其余的不是(可能是它的长度)。请建议。谢谢

+0

您需要提供更多的上下文。什么是URL? URL [编码](https://www.w3schools.com/tags/ref_urlencode.asp)?你的R脚本的相关部分怎么样?有可能你的命令格式不正确。你有没有试过'console.log'命令参数到'exec'方法?它是否完全按照打印的命令行工作? –

这不是一个确切的答案,但我希望它有助于调试问题;

我在这里试图做的是双引号param1,并将其从exec中分离出来,使它更容易阅读。

祝你好运。

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