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

时间:2011-08-06 09:20:12

标签: ruby

我遇到了最奇怪的问题。以下代码工作正常:

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

2 个答案:

答案 0 :(得分:12)

你试过while (l = $stdin.gets.chomp!)吗?否则Kernel#gets会从ARGV读取。

答案 1 :(得分:1)

试试这样:

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

如果传入两个以上的参数,它仍然会失败。如果您想要处理ARGV.clear,请在构建h后致电{{1}}。