【问题标题】:node - pass variable to child processnode - 将变量传递给子进程
【发布时间】:2021-03-17 16:21:01
【问题描述】:

是否可以将变量传递给节点 cli 脚本的子进程? 例如:

const child = require('child_process').spawn;
const script = 'path/to/my/file.js';

const a = 'value';
// pass the variable a to child
child('node', [script], { cwd: __dirname });

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

    您可以传递字符串值或任何可以转换为字符串的内容作为命令行参数。

    const child = require('child_process').spawn;
    const script = 'path/to/my/file.js';
    
    const a = 'value';
    // pass the variable a to child
    child('node', [script, a], { cwd: __dirname });
    

    child_process.spawn() 的第二个参数可以是一个字符串数组,将作为命令行参数传递给新进程。新进程的代码,然后需要从命令行获取它们才能使用它们。

    注意,参数必须是字符串或具有.toString() 方法的东西,该方法会将其转换为有意义的字符串。

    还要注意doc 中的此安全评论:

    如果启用了 shell 选项,请勿将未经处理的用户输入传递给 这个功能。可以使用任何包含 shell 元字符的输入 触发任意命令执行。

    【讨论】:

    • 我已经阅读了有关的文档,但那部分对我来说并不是很清楚。谢谢你的解释。我从 sn-p 看到您传递了两个数组,一个是将要执行的脚本,第二个是我要传递的变量。我也可以在脚本数组中传递变量?如何在子进程脚本中获取它?
    • @newbiedev - 两个数组是错误的。它应该只是一个数组中的两个项目。我对您使用原始代码所做的事情感到困惑。无论如何,我更正了答案。它现在显示的方式,相当于在 cmd 行上键入:node path/to/my/file.js value,这就是我认为你想要的。 node 从此创建 process.argv,这将可用于您的脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2016-10-28
    相关资源
    最近更新 更多