【问题标题】:How to get process.stdio from node.js script?如何从 node.js 脚本中获取 process.stdio?
【发布时间】:2019-12-04 23:41:14
【问题描述】:

对不起,如果我描述的不够充分,如果需要,请告诉我。

我正在尝试让一个 node.js 脚本在另一个 node.js 脚本上使用 child_process.spawn()。我能够成功执行它,但我无法从 stdin、stdout 和 stderr 以外的管道检索数据。

当我执行spawn() 命令时,我可以选择访问“stdio”,但process 没有该选项。 process.stdio 未定义。

当我spawn() 一个 ffmpeg 进程时,我可以轻松地从超过 3 个默认管道中获取数据。

所以,我的问题是:如何从常规 node.js 脚本访问更多管道?

基本上我想访问process.stdio[1]而不是process.stdout之类的东西,因为这样我就可以使用比2高得多的数字process.stdio

感谢您的帮助,谢谢

【问题讨论】:

    标签: node.js


    【解决方案1】:

    根据child process docsthis SO question,您可以通过向{ fd: 3 } 创建写入流来做到这一点:

    在父级上:

    const opts = {
        stdio: ['pipe', 'pipe', 'pipe', 'pipe']
    };
    const child = child_process.spawn('node', ['./child.js'], opts);
    
    //read data
    child.stdio[3].pipe(myHandler);
    //or
    child.stdio[3].on('data', data => {
      //handle data
    });
    

    关于孩子:

    const writeStream = fs.createWriteStream(null, {fd: 3});
    dataStream.pipe(writeStream);
    //or write data chunks directly
    writeStream.write(data);
    

    这是未经测试的,但应该可以正常工作。

    【讨论】:

    • 我爱你,你救了我几个小时。真诚的,非常感谢你。如果您是 Shinobi 用户,请在 Discord 上与我联系,我会为您提供终身免费订阅密钥。谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 2021-09-14
    • 2014-05-04
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2010-10-17
    • 2011-03-09
    相关资源
    最近更新 更多