【问题标题】:Getting data into a node script - more complex than command line arguments将数据输入节点脚本 - 比命令行参数更复杂
【发布时间】:2013-09-26 21:34:02
【问题描述】:

我将我的任务拆分为多个节点脚本,“节点程序”将在其他 Node 应用程序中使用 Node 的子进程 exec 函数与 node program1.jsnode program2.js 等单独运行。

这样一来事情就分开了,我可以在多个其他应用程序中重复使用一个程序。

很容易这样的节点程序中获取数据,您只需将任何您想要的数据扔到标准输出并让exec 在另一端捕获它。

要将数据放入节点程序,如何操作?如果数据只是简单的命令行参数,这很容易,但是我如何将任意数据(二进制、JSON 等)放入其中(在或接近我调用exec 的位置)?也许一些管道?示例代码我将不胜感激。

【问题讨论】:

    标签: node.js command-line-arguments stdout


    【解决方案1】:

    使用env 属性将环境变量传递给衍生的子进程。您可以在 exec() 中执行此操作,但对于生成 Node 进程,最好使用 fork(),因为它会创建一个新的 V8 实例,这就是您正在执行的操作。

    这是传递环境变量的方式:

    var exec = require('exec');
    var child = exec(command, {
      env: {
        buffer: new Buffer(8),
        json: JSON.stringify(json),
        string: 'a simple string'
      }
    }, function(error, stdout, stderr) {
      // execution callback
    });
    

    这就是您在子进程中使用变量的方式:

    process.env.buffer
    process.env.json
    process.env.string
    

    【讨论】:

    • 如果不启动一个全新的进程,exec 会做什么?另外,在 env 中,我可以放任何我想要的东西,包括我选择的整个对象(不仅仅是缓冲区、json 或字符串)吗?
    • 函数exec()fork() 都启动了一个全新的进程。只是 fork() 是专门为启动新的 Node 进程而创建的。是的,您可以将任何类型的变量存储到env
    • 好的,但仅供参考,似乎 env 对象内的布尔值不起作用。我最终在 env 中放置了一个字符串化的 json(就像你所做的那样),它包装了我需要的所有东西,工作正常。
    猜你喜欢
    • 2020-08-28
    • 2014-03-29
    • 2013-07-05
    • 1970-01-01
    • 2021-02-23
    • 2014-03-12
    • 1970-01-01
    • 2018-10-16
    • 2014-03-28
    相关资源
    最近更新 更多