我正在使用提示模块,节点版本为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 $
答案 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);