是否可以推送文本以提示输入?

时间:2019-06-27 02:29:23

标签: node.js prompt stdio

我正在使用提示模块,节点版本为12.4.0
我想知道是否有可能将字符串推送到hint.get()的“输入字段”

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

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

我尝试了process.stdout.write,process.stdin.write
我还尝试将process.std * .write替换为hint.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 $

1 个答案:

答案 0 :(得分:0)

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

提示在幕后使用readline,readline具有.write功能,可满足我的需要,将可编辑的文本发送到提示。

提示本身不会扩展此功能,并且由于该功能已经维护了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);