gpt4 book ai didi

ruby - 输出到控制台,同时在 ruby​​ 中保留用户输入

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:08 25 4
gpt4 key购买 nike

我有一个 ruby​​ 脚本,它同时异步地接收和显示来自服务器的消息,并允许用户在控制台上输入。当收到一条消息时,它当前正在用户输入的内容中间写入。输入本身并没有乱码,但看起来很糟糕。理想情况下,它会保存用户当前的输入,输出消息,然后在下一行恢复输入。我已经在 c 中通过拦截每个击键来完成此操作,但我只记得这是一个主要的麻烦。我是 ruby​​ 的新手,所以我不确定是否有这样做的好方法,或者如何去做。

示例:用户正在键入 >abcde,消息 hello 出现,然后用户键入 fgh。控制台现在将显示:

>abcdehellofgh

用户可以在最后继续输入。我希望它显示:

hello
>abcdefgh

最佳答案

我提案的两个重要部分是:
1. system("stty raw -echo") # 立即获取任何键入的字符与
2. 使用带有字符串变量的 STDIN.getc 作为输入缓冲区来重新打印用户输入。

按 9(& bool 变量 incoming_message)用于对服务器消息进行超简单模拟。
(更加现实会使示例膨胀而不会增加太多内容,因为无论如何您都必须根据您的场景调整想法。)

按 x 退出。

示例输出:

$ ruby simultaneous_input_and_output.rb
Hello World!9
The incoming message is: true
Hello World!9x

You entered:
Hello World!9x
End!



#!/usr/bin/ruby

$input_buffer = "";
incoming_message = false

begin
system("stty raw -echo")

begin
str = STDIN.getc
print str.chr

$input_buffer = $input_buffer + str.chr
if str.chr == '9'
incoming_message = true
end
if incoming_message
puts "\nThe incoming message is: " + incoming_message.to_s
print $input_buffer
incoming_message = false
end
end while (str.chr != 'x')
ensure
system("stty -raw echo")
end

puts "\n\nYou entered:"
puts $input_buffer
puts "End!"

附言:对于系统(“stty raw -echo”)参见(用户 Jay) How to get a single character without pressing enter?

关于ruby - 输出到控制台,同时在 ruby​​ 中保留用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com