为什么IO.Popen挂起一个有效的命令



我使用IO.popen运行curl命令(octet stream POST)。我复制命令并在命令行上运行它,它工作了。然而,用popen在Ruby中运行它会导致流在我的服务器上意外结束,Ruby脚本只是挂起,curl无休止地运行。

我是这样做的:

curl = "curl "
curl += "--cookie "JSESSIONID=#{@sessionid}" "
curl += "-H "Content-type:application/octet-stream" "
curl += "-X POST "
curl += "-o "#{responseFile}" "
curl += "--data-binary "@#{filename}" "
curl += ""#{url}""
puts "command: #{curl}"
IO.popen(curl, "r") { |out|
  out.readlines
}
# Script never makes it to here
我一定是做了什么傻事。这是什么?

这是curl的标准输出。

我使用的是Ruby 1.8.6

popen还为curl提供了从读取的管道,如下例所示:

$ echo -e 'foonbarnzoo' | 
  ruby -e 'pipe = IO.popen("grep oo", "r") {|out| p out.readlines}'
["foon", "zoon"]

我猜curl也想从stdin POST到服务器,那里没有任何东西来自,所以它来了一个30秒的超时

与其编写自己版本的wheel,为什么不利用Ruby中做同样事情的许多gem呢?

我推荐和伤寒,遏制为起点。此外,内置的OpenURI可以很好地满足大多数"get"类型的需求。

有一个有用的线程在SO这个帖子请求也。

相关内容

  • 没有找到相关文章

最新更新