2017-07-03 88 views
3

我認爲這很簡單,但以下內容不能按預期工作。Node.js將文本作爲`spawnSync`的標準輸入傳遞給我。

我想將數據傳輸到一個進程,比如來自Node的wc(說明只是一個任意命令)。

docsSO questions似乎表明,經過一個流應該工作:

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不會立即揭示了什麼預期的有效選項是。

+0

這是頗耐人尋味!我只設法通過直接將數據傳遞給'input'選項而不是重新分配'stdin'來工作。 –

+0

_「請注意,流必須具有基礎描述符」_「。我不認爲你的'textStream'有一個。 – robertklep

+0

謝謝@robertklep - 我也注意到了;從我讀過的所有內容中,我們並不清楚爲什麼需要描述符,它是如何實現/與常規流不同的,或者在任何情況下如何解決它。這是一個奇怪的,看似武斷的要求。 –

回答

3

要提出具體的數據作爲stdin數據的子進程,你可以使用input選項:

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