Node.js标准输出刷新

3

也许我正在重复这个问题,但是提供的答案可能是针对旧版本的node(我正在使用v0.5.10),因为仅使用fs.writeSync(1,“Foo \ n”); 无法解决我的问题(在从shell脚本执行脚本时,输出不会被刷新),而fs.fsyncSync(1); 未记录,当我尝试它时,node会引发异常:

 return binding.fsync(fd);
             ^
 Error: UNKNOWN, Operation complete;

at Object.fsyncSync (fs.js:353:18)
at Interface.<anonymous> (C:\Dev\Git\org.github.pistacchio.streamcommunication\nodebot.js:36:12)
at Interface.emit (events.js:67:17)
at Interface._onLine (readline.js:162:10)
at Interface._line (readline.js:426:8)
at Interface._ttyWrite (readline.js:603:14)
at ReadStream.<anonymous> (readline.js:82:12)
at ReadStream.emit (events.js:88:20)
at ReadStream._emitKey (tty.js:309:10)
at ReadStream.onData (tty.js:66:12)

不一定要阻塞,一个on-flush回调就足够了,对吧? - thejh
我正在编写控制台脚本,因此它应该是阻塞的。对于我的目的来说,所有异步调用都是问题而不是好处。 - pistacchio
1个回答

2
你希望它是阻塞的,但我猜 streamlinejs 对你也有用:
var done = process.stdout.write(str);
if (!done) {
  // this effectively means "wait for this
  // event to fire", but it doesn't block everything
  process.stdout.on('drain', _)
}
doSome(otherStuff)

您可以将此代码粘贴到这里,以查看在调用它时编译后的结果。另外,您需要使用npm install streamline -g安装Streamline,将您的代码放入以_.js结尾的文件中,并使用node-streamline filename_运行您的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接