通常,stdout是行缓冲的.换句话说,只要您的printf参数以换行符结尾,您就可以立即打印该行.使用管道重定向时,这似乎不成立tee.
我有一个C++程序,a它输出字符串,总是被\n终止stdout.
当它由它自己运行时(./a),所有内容都在正确的时间正确打印,正如预期的那样.但是,如果我将它传递给tee(./a | tee output.txt),它会在它退出之前不会打印任何内容,这会使使用的目的失效tee.
我知道我可以通过fflush(stdout)在C++程序中的每次打印操作之后添加一个来修复它.但是有更清洁,更简单的方法吗?例如,是否有一个命令可以运行stdout,即使使用管道也会强行进行行缓冲?
我正在尝试创建一个节点应用程序,该应用程序使用“ readline”模块逐行读取文本文件,并将其打印到控制台。
var lineReader = require('readline');
lineReader.createInterface({
input: fs.createReadStream('./testfile')
});
lineReader.on('line', function(line){
console.log(line);
});
Run Code Online (Sandbox Code Playgroud)
根据模块的文档,应该有一个“ on”方法。但是,当我记录我创建的readline对象的实例时,在任何地方都看不到“ on”方法:
{ createInterface: [Function], Interface: { [Function: Interface]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: false,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } },
emitKeypressEvents: [Function: emitKeypressEvents],
cursorTo: [Function: cursorTo],
moveCursor: [Function: moveCursor],
clearLine: [Function: clearLine],
clearScreenDown: [Function: clearScreenDown],
codePointAt: [Function: deprecated],
getStringWidth: [Function: deprecated],
isFullWidthCodePoint: [Function: deprecated],
stripVTControlCharacters: [Function: deprecated] }
Run Code Online (Sandbox Code Playgroud)
因此,自然地,当我调用时lineReader.on(),我得到一个错误,指出该函数不存在。
我正在严格按照文档进行操作……我缺少什么?on方法在哪里?
非常感谢您抽出宝贵的时间。
buffer ×1
filereader ×1
javascript ×1
methods ×1
module ×1
node.js ×1
pipe ×1
stdout ×1
tee ×1
unix ×1