Tag: readline

节点js – 如何在节点js中等待用户input的同时暂停后续代码行的执行

我是新来的node.js和飞行中学习。 我已经写了一个代码来提示从CLI CLIinput超时。 问题在于,在等待用户input时,后续的代码行被执行,而不是暂停。 我如何在节点中实现这一点。 以下是我的代码 var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); waitForUserInput = function (timeout) { var timer = setTimeout(function () { console.log("Process Resumed.."); rl.close(); }, timeout); rl.question("Press Enter to Continue..!!", function () { console.log("Process Resumed.."); clearTimeout(timer); rl.close(); });} 方法调用是 waitForUserInput(5000); 截至目前,如果我做一个console.log(“你好”); 输出是 过程已暂停。 按Enter键继续..! 你好 只有在用户input或超时后才需要console.log消息。

使用'readline'同步执行node.js程序

我遇到了一些问题,使节点的asynchronous性与我合作,经过几个小时的callback和Googlesearch; 我终于转向你们。 我有一个程序,需要使用节点的readline模块从文件中读取行。 该文件包含传递给在我的节点程序中定义的一些asynchronous函数的数据。 一旦所有的数据都被成功的读取和处理,这个数据需要被parsing成JSON格式,然后输出。 我的问题是,当我调用: readLine.on('close', function() { …… } ,这是在asynchronous函数完成运行之前运行,因此我留下一个什么也没有输出,但程序一直运行asynchronousfunction。 我创build了一个简单的函数框架,可以更清楚地解释我的情况: function firstAsyncFunc(dataFromFile) { //do something asynchronously return processedData; } function secondAsyncFunc(dataFromFile) { //do something else asynchronously return processedData; } //create readline var lineReader = require('readline').createInterface({ input: require('fs').createReadStream('data.txt') }); //array to hold all the data processed var totalDataStorage; //read file lineReader.on('line', function(line) { […]

如何把这个Python代码翻译成Node.js

我在这里得到了一个非常好的答案,关于如何清除一行/删除文件中的一行,而不必截断文件或用新版本的文件replace文件,下面是Python代码: #!/usr/bin/env python import re,os,sys logfile = sys.argv[1] regex = sys.argv[2] pattern = re.compile(regex) with open(logfile,"r+") as f: while True: old_offset = f.tell() l = f.readline() if not l: break if pattern.search(l): # match: blank the line new_offset = f.tell() if old_offset > len(os.linesep): old_offset-=len(os.linesep) f.seek(old_offset) f.write(" "*(new_offset-old_offset-len(os.linesep))) 这个脚本可以这样调用: ./clear-line.py <file> <pattern> 为了教育目的,我想弄清楚是否可以在Node.js中写这个。 我当然可以逐行阅读一个带有Node.js的文件。 但是我不确定在这种情况下Node.js是否具有tell […]

逐行读取文件stream同步

我正在查看nodejs readline模块文档,以便我必须逐行读取非常大的文件,而且看起来不错。 但是对于我的特定任务,我需要它同步读取行,即。 不pipe怎样,第5行不能在第4行之前读取,而且由于节点的性质,我只是想确认这个代码是否安全, const readline = require('readline'); const fs = require('fs'); const rl = readline.createInterface({ input: fs.createReadStream('sample.txt') }); rl.on('line', (line) => { console.log(`Line from file: ${line}`); }); 如果不是,我应该使用/做什么? 目前它正在为我工​​作,但我不知道它是否会工作与下一行可能比以前更快地parsing大行等。

readline不会在rj.close()在nodejs中发出后停止行读取

我有以下文件,我想逐行阅读,并停止阅读一次,我发现“名称服务器8.8.8.8”。 nameserver 8.8.8.8 nameserver 45.65.85.3 nameserver 40.98.3.3 我正在使用nodejs和readline模块来执行此操作 const readline = require('readline'); const fs = require('fs'); function check_resolv_nameserver(){ // flag indicates whether namerserver_line was found or not var nameserver_flag = false; const rl = readline.createInterface({ input: fs.createReadStream('file_to_read.conf') }); rl.on('line', (line) => { console.log(`Line from file: ${line}`); if (line === 'nameserver 8.8.8.8'){ console.log('Found the right file. […]

如何在node.js中为readline提供默认的答案

js为了创build一个命令行向导。 向导使用rl.question(query,callback)方法向用户提出一些问题。 问题是我想提出问题并提供一个默认答案,以便让用户能够按回车确认默认答案,编辑默认答案或取消默认答案,然后按回车键跳过问题。 像这样的东西: 你最喜欢什么颜色? 红_ 如果用户按回车键:如果用户改变红色为绿色,则回答为红色:如果用户取消红色并按回车,回答将为绿色,回答为“”,向导将跳到下一个问题。 你知道如何用Node.js做这样的事吗?

写入stream最终溢出

我正在使用ReadLine逐行读取一个非常大的文件,以便能够检测到可以将其分割成多个有意义片段的地方。 我使用WriteStream来写入这些文件。 当正则expression式检测到剪切的地方时,我结束()当前打开的WriteStream并为刚刚读取的行打开一个新的。 问题是,所有这些文件最终被截断,就好像end()调用没有完成它的工作。 我检查了write()的成功并在缓冲区满时暂停inputstream。 这是我的代码的相关部分: var rl = readline.createInterface({ input: fs.createReadStream('basesystem.js',{encoding:'utf8'}), output: process.stdout }); rl.on('line', function (line) { var match = rexp.exec(line); if (match) { out.end(); console.log(path.join(PATH, match[2],'.js')); out = fs.createWriteStream(path.join(PATH,match[2]) + '.js', {encoding:'utf8'}); } if (!out.write(line + '\n')) { console.log('***** paused **** '); rl.pause(); out.once('drain', function () { console.log('***** resume **** '); rl.resume(); […]

如何用node.js的readline模块连续input两个数据?

我正在创build一个程序,从命令行input两个数字,然后在node.js中显示总和。 我正在使用readline模块来取stdin。 以下是我的代码。 const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const r2 = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Please enter the first number', (answer1) => { r2.question('Please enter the second number', (answer2) => { var result = (+answer1) + (+answer2); console.log(`The sum of above two numbers is ${result}`); […]

Node.JS Readline在退格按键上打印新行

我有一些代码读取在一些用户input,没有什么奇特的: var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Please enter some text:\n', function(answer){ rl.pause(); console.log(answer); }); 不幸的是,当提示用户input时,如果他们input错字并尝试使用BACKSPACE删除文本,则提示将向下移动一行。 有没有办法阻止这种情况的发生?

给terminal提示添加颜色会导致大的空白区域

我正在处理一个简单的cli脚本,并想添加一些颜色到下面的代码: rl.question('Enter destination path: ', function(answer) { // … }); rl.write('/home/' + user + '/bin'); 在terminal显示: Enter destination path: /home/jmcateer/bin_ 但我想添加一些颜色的提示我做了以下几点: rl.question('\u001b[1;36mEnter destination path:\u001b[0m ', function(answer) { }); rl.write('/home/' + user + '/bin'); 命令行提示结束显示: Enter destination path: /home/jmcateer/bin_ 它的工作原理,但是我不希望有大量的空白空间。 有没有人有任何想法如何处理这个? 编辑: 我不能通过退格来删除白色空间…当我尝试使用退格键时,白色空间像这样跳到另一端 Enter destination path: /home/jmcateer/bin_ Enter destination path: /home/jmcateer/bi _ Enter destination path: /home/jmcateer/b […]