【问题标题】:how to pass multiple params in exec in node js如何在节点js中的exec中传递多个参数
【发布时间】:2017-07-20 02:22:51
【问题描述】:

我正在使用 exec 库从 node js express 调用 R-script。以下是我的代码:

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 而其余部分不是(可能很长)。请建议。谢谢

【问题讨论】:

  • 您需要提供更多上下文。网址是什么?网址是encoded 吗?你的 R 脚本的相关部分呢?您的命令可能格式错误。您是否尝试过 console.log exec 方法的命令参数?它是否完全按照打印的方式从命令行运行?

标签: javascript r node.js exec child-process


【解决方案1】:

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

我在这里尝试做的是双引号 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);
        }
    });

【讨论】:

  • 如果您接受来自用户输入或 Web 请求的参数,这可能是严重的 RCE,除非以某种方式缓解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2020-11-24
  • 2022-12-17
  • 1970-01-01
相关资源
最近更新 更多