Node.js 将文本作为 `spawnSync` 的标准输入传递

标签 node.js node-streams

我认为这会很简单,但下面的操作并不像预期的那样。

我想将数据通过管道传输到一个进程,比如说(只是一个任意命令用于说明)wc,来自 Node。

docs及其他SO questions似乎表明传递 Stream 应该有效:

const {spawnSync} = require('child_process')
const {Readable} = require('stream')

const textStream = new Readable()
textStream.push("one two three")
textStream.push(null)

const stdio = [textStream, process.stdout, process.stderr]
spawnSync('wc', ["-c"], { stdio })

不幸的是,这会引发错误:

The value "Readable { ... } is invalid for option "stdio"

relevant bit of code from internal/child_process.js不会立即透露预期的有效选项是什么。

最佳答案

要将特定数据显示为子进程的 stdin 数据,您可以使用 input 选项:

spawnSync('wc', ['-c'], { input : 'one two three' })

关于Node.js 将文本作为 `spawnSync` 的标准输入传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44891623/

相关文章:

javascript - 如何克隆 NodeJS 流?

mysql - 如何将数据从 sails 水线模型流式传输到 sails 套接字?

javascript - Webpack-即使在 npm 安装后也找不到模块

javascript - Node.js setTimeout 不等待

node.js - 何时在NODE中使用错误中间件功能

node.js - ReactJS 发送 GET 请求,响应 302 重定向,收到 CORS 错误

node.js - Mongoose 填充多个嵌套文档

node.js - Gulp Stream 完成并带有 promise

node.js - 如何使用 Node.js 创建带缓冲区的读取流