【问题标题】:Is it possible to push text to prompt input?是否可以推送文本以提示输入?
【发布时间】:2019-06-27 02:29:23
【问题描述】:

我正在使用提示模块,节点版本 12.4.0
我想知道是否可以将字符串推送到 prompt.get()

的“输入字段”

以下脚本显示一个(双)“提示:”
5 秒后,它会插入文本“这是一个测试”
当给出输入命令时,字符串不会被识别为输入。
在按 Enter 之前也无法编辑字符串。
(在 5 秒前输入任何内容并按回车,输入将显示)

最终目标:让命令从外部来源发送到提示,但让最终用户能够在输入之前修改命令。

我试过 process.stdout.write,process.stdin.write
我还尝试将 process.std*.write 替换为 prompt.std*.write
答案可能是特定于操作系统的,但我在 Win10 x64 和 Linux 下都尝试过这段代码

const prompt = require("prompt");

function myFunc() {
  process.stdin.write("This is a test");
}
setTimeout(myFunc, 5000);

prompt.get({
  properties: {
    test: {
      description: "prompt"
    }
  }
}, (err, result)=> {
  console.log("input: "+ result.test);
});

实际结果:
~/Nodejs/temp$ 节点 index.js
提示:提示:这是一个测试
输入:
~/Nodejs/temp$

想要的结果:
~/Nodejs/temp$ 节点 index.js
提示:提示:这是一个测试
输入:这是一个测试
~/Nodejs/temp$

【问题讨论】:

    标签: node.js prompt stdio


    【解决方案1】:

    在深入了解提示模块的工作原理后,我自己“解决”了这个问题。

    prompt 在幕后使用 readline,而 readline 有一个 .write 函数可以满足我的需要,将可编辑的文本发送到提示符。

    prompt 本身并没有扩展这个功能,因为已经 3 年没维护了,所以我改用了 readline。

    const readline = require('readline');
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout,
      prompt: 'prompt> '
    });
    
    rl.prompt();
    
    rl.on('line', (line) => {
      console.log(line);
      rl.prompt();
    }).on('close', () => {
      console.log('Have a great day!');
      process.exit(0);
    });
    
    
    // simulate external input, and write to prompt>
    function myFunc() {
      rl.write("This is a test");
    }
    setTimeout(myFunc, 5000); 
    

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 2021-08-13
      • 2020-08-16
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2019-06-10
      相关资源
      最近更新 更多