如果进程以参数启动,则Ruby readline会失败

我有一个最奇怪的问题。 以下代码工作正常:

require 'json' require 'net/http' h = Net::HTTP.new("localhost", 4567) while(l = gets.chomp!) res = h.post("/api/v1/service/general",l) puts res.body end 

但是,通过从参数获取主机/端口的小修改:

 require 'json' require 'net/http' h = Net::HTTP.new(ARGV[0], ARGV[1]) while(l = gets.chomp!) res = h.post("/api/v1/service/general",l) puts res.body end 

..并从ruby service.rb localhost 4567 ……

我收到此错误:

 service.rb:4:in `gets': No such file or directory - localhost (Errno::ENOENT) 

在Ubuntu 11.04上使用ruby 1.9.2p0

你有没有尝试过while (l = $stdin.gets.chomp!) ? 否则Kernel#getsARGV读取。

试试这样:

 h = Net::HTTP.new(ARGV.shift, ARGV.shift) while(l = gets.chomp!) 

如果传入两个以上的参数,它仍然会失败。 如果你想处理它,你应该在构造h之后调用ARGV.clear