当前位置: 首页 > 面试题库 >

node.js:从stdin读取readSync吗?

邢飞昂
2023-03-14
问题内容

是否可以从node.js中的stdin同步读取?因为我正在用JavaScript编写JavaScript编译器,所以很有趣。Brainfuck支持需要同步执行的读取操作。

我尝试了这个:

const fs = require('fs');
var c = fs.readSync(0,1,null,'utf-8');
console.log('character: '+c+' ('+c.charCodeAt(0)+')');

但这只会产生以下输出:

fs:189
  var r = binding.read(fd, buffer, offset, length, position);
              ^
Error: EAGAIN, Resource temporarily unavailable
    at Object.readSync (fs:189:19)
    at Object.<anonymous> (/home/.../stdin.js:3:12)
    at Module._compile (module:426:23)
    at Module._loadScriptSync (module:436:8)
    at Module.loadSync (module:306:10)
    at Object.runMain (module:490:22)
    at node.js:254:10

问题答案:

我不知道什么时候出现,但这是向前迈出的有益一步:http :
//nodejs.org/api/readline.html

var readline = require('readline');

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

rl.on('line', function (cmd) {
  console.log('You just typed: '+cmd);
});

现在,我可以一次从stdin中读取行。快乐的时光。



 类似资料:
  • 问题内容: 我想阅读Go程序的原始内容。例如,如果我这样做了,我希望可以访问“ test stdin”。我尝试从中读取,但是如果其中没有任何内容,则它将等待输入。我也尝试过先检查大小,但是即使输入传入也为0。 我能做什么? 问题答案: 我认为您的问题本身没有明智的答案,因为没有“初始标准输入”之类的东西。类似于Unix的操作系统和Windows都实现了“标准流”的概念,它的工作原理如下(简化):创

  • 问题内容: 是否可以在正在运行的nodejs脚本中侦听传入的击键?如果我使用并监听其事件,则输入将被缓冲到下一个换行符,如下所示: 运行此,我得到: 我想要看的是: 我正在寻找一个等效于例如ruby的nodejs 这可能吗? 问题答案: 如果切换到原始模式,则可以通过这种方式实现:

  • 我想从STDIN读取输入。我在C中使用fork()方法。我有子进程和父进程。我的输入是多行的。父进程只等待子进程终止,子进程只读取第一行,子进程终止后,父进程继续读取。我想要打印行。例如;输入-> null 子进程打印“星期一”,父进程打印“星期二”和“星期三”。一旦到达文件结尾,程序就会终止。 ./program

  • 问题内容: 在读取文件的一部分后,我尝试在文件上调用进程。例如: 如果我在执行subprocess.call之前不从中读取任何内容,则此方法很好,但如果我从中读取了任何内容,则子流程将看不到任何内容。这是使用python 2.7.3。我在说明此行为的文档中找不到任何内容,而且对子流程源的(非常)简短的浏览没有发现原因。 问题答案: 如果您不加缓冲地打开文件,那么它将起作用: 模块在文件描述符级别(

  • 问题内容: 当有字符可用时,是否有一种优雅的方法来触发事件?我想避免投票。 问题答案: 您将必须创建一个单独的线程以阻止读取,直到有可用的线程为止。 如果您不想实际消耗输入,则必须用内部缓冲区包装它,读入缓冲区,然后喊叫,并在要求输入时从缓冲区返回数据。 您可以这样解决:

  • 问题内容: 我正在使用以下命令行调用来处理带有node的文本文件: 文件的每一行都需要单独处理,但是一旦处理完,输入行可能会被忘记。 使用标准输入的数据侦听器,我得到了按字节大小分块的输入流,因此进行了设置。 但这似乎草率。必须在行数组的第一项和最后一项周围进行按摩。有没有更优雅的方式做到这一点? 问题答案: 您可以使用readline模块逐行从stdin进行读取: