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

Node.js pass text as stdin of `spawnSync`

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

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

docs and other 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' })