5
我在Ruby中实现了一个小型的telnet服务器。我目前面临的问题是我想添加readline支持,以便我可以拥有制表符完成和命令行历史记录支持。我看了一下Readline库,但它好像只能通过stdin工作。有没有办法在Ruby中这样做(我注意到Python的解决方案)?Ruby线编辑telnet服务器
我在Ruby中实现了一个小型的telnet服务器。我目前面临的问题是我想添加readline支持,以便我可以拥有制表符完成和命令行历史记录支持。我看了一下Readline库,但它好像只能通过stdin工作。有没有办法在Ruby中这样做(我注意到Python的解决方案)?Ruby线编辑telnet服务器
您可以通过将管道连接到readline来完成此操作。下面是一个使用ri readline文档中的while
循环的示例,该循环仅将command 1
,command2
,command 3
发送到readline。
require 'readline'
rd, wr = IO.pipe
(1..3).each do |i|
wr.puts "command #{i}"
end
wr.close
Readline.input = rd
while buf = Readline.readline('', true)
p Readline::HISTORY.to_a
print("-> ", buf, "\n")
end
输出:
["command 1"]
-> command 1
["command 1", "command 2"]
-> command 2
["command 1", "command 2", "command 3"]
-> command 3
对不起,你想在服务器上实现的ReadLine?我相信readline是在客户端实施的。 – 2011-06-15 17:39:33
Jip,这是我目前的问题。 Readline只适用于标准输入(因此,只有客户端)。我想知道是否可以通过telnet使readline工作,以便我的telnet服务器公开的服务器端命令可以自动完成。 – wcmatthysen 2011-06-15 18:53:35
我不认为readline只能用于标准输入。你希望用户使用标准的telnet客户端连接吗?实际上我不确定telnet是否支持Tab完成。我认为最简单的方法就是简单地实现你自己的客户端,并在那里添加tabline支持。 – 2011-06-15 19:10:01