我的问题与此相似:如何检测我的shell脚本是否正在通过管道运行?。区别在于我正在使用的Shell脚本是用Node.js编写的。
假设我输入:
echo "foo bar" | ./test.js
然后,我怎么能得到的价值"foo bar"的test.js?
"foo bar"
test.js
我已经阅读了Unix和Node:管道和流,但这似乎只能提供异步解决方案(除非我误会了)。我正在寻找一个同步解决方案。同样,通过这种技术,检测脚本是否正在通过管道传输似乎不是很简单。
TL; DR我的问题有两个方面:
管道用于处理小的输入(例如“ foo bar”),也可以处理巨大的文件。
流API确保您可以开始处理数据,而无需等待巨大的文件完全通过管道传输(这对于速度和内存来说更好)。它的方法是为您提供数据块。
没有用于管道的同步API。如果您确实想在做某件事之前将整个管道输入都掌握在手中,则可以使用
注意:仅使用 节点> =0.10.0,因为该示例使用stream2 API
var data = ''; function withPipe(data) { console.log('content was piped'); console.log(data.trim()); } function withoutPipe() { console.log('no content was piped'); } var self = process.stdin; self.on('readable', function() { var chunk = this.read(); if (chunk === null) { withoutPipe(); } else { data += chunk; } }); self.on('end', function() { withPipe(data); });
用…测试
echo "foo bar" | node test.js
和
node test.js