Javascript process.stdout.write()在Node.js readline CLI程序中不工作
我正在使用该模块为Node.js中的应用程序创建命令行界面(CLI) 问题是我不能像通常在终端中那样向上滚动查看过去的命令。我的CLI只是一个固定窗口,如果我在屏幕上打印的内容太多,就会丢失顶部的信息,无法向上滚动查看 (我正在Mac OSX Mavericks上运行我的程序) 提前谢谢 代码段:Javascript process.stdout.write()在Node.js readline CLI程序中不工作,javascript,node.js,command-line-interface,readline,Javascript,Node.js,Command Line Interface,Readline,我正在使用该模块为Node.js中的应用程序创建命令行界面(CLI) 问题是我不能像通常在终端中那样向上滚动查看过去的命令。我的CLI只是一个固定窗口,如果我在屏幕上打印的内容太多,就会丢失顶部的信息,无法向上滚动查看 (我正在Mac OSX Mavericks上运行我的程序) 提前谢谢 代码段: var readline = require('readline'); var Cli = function () { this.txtI = process.stdin; this
var readline = require('readline');
var Cli = function () {
this.txtI = process.stdin;
this.txtO = process.stdout;
process.stdout.write('CLI initialized.');
this.rl = readline.createInterface({input: this.txtI, output: this.txtO });
this.rl.setPrompt('>>>');
this.rl.prompt();
this.rl.on('line', function(line) {
var input = line.toString().trim();
if (input) {
this.txtO.write('cmd: ' + input);
}
this.rl.prompt();
}.bind(this)).on('close', function() {
this.txtO.write('Have a great day!');
process.exit(0);
}.bind(this));
};
new Cli();
将此文件另存为snippet.js并运行
node snippet.js
在终端中。Readline是一个非常棒的模块。历史已经存在。增加完成的可能性也是如此。请尝试下面的代码片段
var readline = require('readline');
function createCLI(opt) {
var rl = readline.createInterface({
input : opt.input,
output : opt.output,
terminal : opt.terminal || true,
completer : opt.completer ||
function asyncCompleter(linePartial, callback){
var completion = linePartial.split(/[ ]+/);
callback(null, [completion, linePartial]);
}
});
rl.on('line', function(line) {
if( !line.trim() ){ this.prompt(); }
else { this.write(line); }
}).on('close', function() {
this.output.write('\n Have a great day!');
process.exit(0);
}).setPrompt(' > ');
rl.output.write(' CLI initialized\n');
return rl;
}
var cli = createCLI({
input : process.stdin,
output : process.stdout
});
cli.prompt();
Readline是一个非常棒的模块。历史已经存在。增加完成的可能性也是如此。请尝试下面的代码片段
var readline = require('readline');
function createCLI(opt) {
var rl = readline.createInterface({
input : opt.input,
output : opt.output,
terminal : opt.terminal || true,
completer : opt.completer ||
function asyncCompleter(linePartial, callback){
var completion = linePartial.split(/[ ]+/);
callback(null, [completion, linePartial]);
}
});
rl.on('line', function(line) {
if( !line.trim() ){ this.prompt(); }
else { this.write(line); }
}).on('close', function() {
this.output.write('\n Have a great day!');
process.exit(0);
}).setPrompt(' > ');
rl.output.write(' CLI initialized\n');
return rl;
}
var cli = createCLI({
input : process.stdin,
output : process.stdout
});
cli.prompt();
它可能正在工作,只是
readline
正在覆盖您的行。尝试输出多行:
process.stdout.write("1\n2\n3\n4\n5");
它可能正在工作,只是
readline
正在覆盖您的行。尝试输出多行:
process.stdout.write("1\n2\n3\n4\n5");
您想如何显示过去的命令?例如,当您按下向上箭头键时?如果是这样的话,这是您必须实现的。您能介绍一下如何在节点脚本中使用readline吗?我添加了一个精简版的CLI。我似乎已经用这段代码解决了我的滚动问题。我还有一个问题。我似乎无法写入process.stdout流。有什么帮助吗?为什么要用
这个.txtO
变量缓存进程.stdout
?为什么不直接使用/referenceprocess.stdout
?我想使用任何流,而不仅仅是process.stdin和process.stdout。我可以将任何流通过管道传输到txtI,并将txtO通过管道传输到任何流。您想展示过去的命令是如何执行的吗?例如,当您按下向上箭头键时?如果是这样的话,这是您必须实现的。您能介绍一下如何在节点脚本中使用readline吗?我添加了一个精简版的CLI。我似乎已经用这段代码解决了我的滚动问题。我还有一个问题。我似乎无法写入process.stdout流。有什么帮助吗?为什么要用这个.txtO
变量缓存进程.stdout
?为什么不直接使用/referenceprocess.stdout
?我想使用任何流,而不仅仅是process.stdin和process.stdout。我可以通过管道将任何流传输到txtI,并将txtO传输到任何流。