2011-06-15 16 views
5

Ruby'de küçük bir telnet sunucusu yapıyorum. Şu anda karşılaştığım sorun, sekme tamamlama ve komut satırı geçmişi desteği alabilmem için okuma desteği eklemek istiyorum. Readline kütüphanesine baktım ama sanki sadece stdin ile çalışacak gibi görünüyor. Bunu Ruby'de yapmanın bir yolu var mı (Python için çözüm fark ettim)?Ruby hattı düzenleme telnet sunucusu

+0

Maalesef sunucuda readline uygulamaya çalışmıştır nelerdir? Readline'ın istemci tarafında uygulanan bir şey olduğuna inanıyorum. –

+0

Jip, şu anda benim sorunum. Readline sadece stdin ile çalışır (bu nedenle sadece istemci tarafı). Telnet sunucumun maruz kaldığı sunucu tarafı komutları için otomatik tamamlama vb. Alabilmem için telnet üzerinden okuma yapmanın mümkün olup olmadığını bilmek istiyorum. – wcmatthysen

+2

Bence readline stdin'den başka bir şey üzerinde çalışacak. Kullanıcıların standart telnet istemcisi kullanarak bağlanmasını bekliyor musunuz? Telnet'in sekme tamamlanmasını destekleyip desteklemediğinden emin değilim. En basit yolun sadece kendi istemcinizi uygulamak ve orada sekme tamamlama ile destek hattı desteği eklemek olduğunu düşünüyorum. –

cevap

1

Bunu, bir boruyu readline içine pipetleyerek yapabilirsiniz. Burada, command 1, command2, , command 3 mesajlarını gönderen while döngüsünü kullanarak bir örnek bulabilirsiniz.

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 

Çıktı:

["command 1"] 
-> command 1 
["command 1", "command 2"] 
-> command 2 
["command 1", "command 2", "command 3"] 
-> command 3