const p = spawn('ls', ['/'])
console.log('$mark$')
p.stdout.pipe(process.stdout)
上面的代码准确打印了根目录的文件列表,即:
$mark$
bin
boot
data
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
solr.log
srv
sys
tmp
usr
var
但是,如果我等待片刻(例如1秒),它什么也不会打印。代码如下:
const p = spawn('ls')
setTimeout(() => {
console.log('$mark$')
p.stdout.pipe(process.stdout)
}, 1000)
仅打印:
$mark$
我想知道为什么第二个代码不显示ls
命令的任何内容。
环境:
答案 0 :(得分:0)
在第二个代码示例中,ls
的输出在您尝试处理输出并通过管道传输时已经完成了很长时间。 Node.js通常不会为您缓冲未使用的管道。您必须在输出开始之前通过管道传输它,否则将丢失数据,或者必须.pause()
。